This, seems to me, is natural, although a bit tedious. (I leave the \seq_pop_left:NN option for another answer).
\documentclass[a4paper]{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\seq_set_from_clist:Nn \l_tmpa_seq { a , b , c , d }
\seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \exp_not:n { \textbf { #1 } } }
\seq_use:Nn \l_tmpb_seq { ,~ }
\ExplSyntaxOff
\end{document}
In case you can't use \seq_set_map:NNn because of its experimentalness, you can define your own function
\seq_new:N \l__map_and_use_seq
\cs_new_protected:Npn \uf_seq_map_use:Nnn #1 #2 #3
{
\seq_clear:N \l__map_and_use_seq
\seq_map_inline:Nn #1 { \seq_put_right:Nn \l__map_and_use_seq { #2 } }
\seq_use:Nn \l__map_and_use_seq { #3 }
}
\seq_set_from_clist:Nn \l_tmpa_seq { a , b , c , d }
\uf_seq_map_use:Nnn \l_tmpa_seq { \textbf { [#1] } } { ,~ }
Or even clist directly if you prefer
\seq_new:N \l__map_and_use_seq
\seq_new:N \l__set_and_map_seq
\cs_new_protected:Npn \uf_clist_map_use:nnn #1 #2 #3
{
\seq_clear:N \l__map_and_use_seq
\seq_set_from_clist:Nn \l__set_and_map_seq { #1 }
\seq_map_inline:Nn \l__set_and_map_seq { \seq_put_right:Nn \l__map_and_use_seq { #2 } }
\seq_use:Nn \l__map_and_use_seq { #3 }
}
\uf_clist_map_use:nnn { a , b , c , d } { \textbf { [#1] } } { ,~ }
{,~\textbf{#1}mapping the rest of theclist. Still, I don't know what's the “official way”. May be something similar to\seq_set_map:NNn \foo \bar {\textbf{#1}}and then\seq_use:Nn \foo {,~}? – Manuel Mar 09 '15 at 19:50