\makeatletter
\newcommand{\crefnames}[3]{%
\@for\next:=#1\do{%
\expandafter\crefname\expandafter{\next}{#2}{#3}%
}%
}
\makeatother
\crefnames{part,chapter,section}{\S}{\S\S}
You can use any set of sectional commands; this is sufficient for lower levels. If you want to use different symbols for \paragraph and \subparagraph, just do
\crefnames{part,chapter,section}{\S}{\S\S}
\crefnames{paragraph}{\P}{\P\P}
Complete example drawn from lockstep's:
\documentclass{book}
\usepackage{cleveref}
\makeatletter
\newcommand{\crefnames}[3]{%
\@for\next:=#1\do{%
\expandafter\crefname\expandafter{\next}{#2}{#3}%
}%
}
\makeatother
\setcounter{secnumdepth}{100}
\crefnames{part,chapter,section}{\S}{\S\S}
\crefnames{paragraph,subparagraph}{\P}{\P\P}
\begin{document}
\chapter{foo}\label{sec:f}
\section{foobar}\label{sec:fb}
\subsection{foobargnu}\label{sec:fbg}
\subsubsection{foobargnugnat}\label{sec:fbgg}
\subsubsection{foobargnugnat2}\label{sec:fbgg2}
These are references to \cref{sec:f}, \cref{sec:fb}, \cref{sec:fbg}, and \cref{sec:fbgg,sec:fbgg2}.
\paragraph{par}\label{par:p}
\subparagraph{subpar}\label{par:sp}
\subparagraph{subpar2}\label{par:sp2}
References to paragraphs: \cref{par:p}, \cref{par:sp,par:sp2}.
\end{document}

In order to avoid problems with spaces in the list of sectional units, you can use xparse:
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\crefnames}{ m m m }
{
\clist_map_inline:nn { #1 } { \crefname{##1}{#2}{#3} }
}
\ExplSyntaxOff
The more complex way you use in your self-answer can be written
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\crefnames}{ m m m }
{
\clist_map_inline:nn { #1 }
{
\crefformat{##1}{#2####2####1####3}
\crefmultiformat{##1}
{#3####2####1####3}
{and~####2####1####3}
{, ####2####1####3}
{, and~####2####1####3}
}
}
\ExplSyntaxOff