Change your code into
\clist_new:N \g_mapo_allauthors_clist
\NewDocumentCommand\addauthor{m}
{
\clist_gput_right:Nn \g_mapo_allauthors_clist { #1 }
}
\NewDocumentCommand \printall { } { } % initialization
\DeclareExpandableDocumentCommand \printall { }
{
\clist_use:Nnnn \l_mapo_allauthors_clist { ~and~ } { ,~ } { ~and~ }
}
The main point is \DeclareExpandableDocumentCommand (with a preventive check that the command is undefined). Macros defined with \NewDocumentCommand are “protected”, so they won't expand in \edef contexts, which is what hyperref uses for getting the authors' list in pdfauthor. On the other hand, \clist_use:Nnnn is safely fully expandable, so we can (and should) use \DeclareExpandableDocumentCommand.
Use the proper naming convention for variables: g stands for “global”, which should be used here as the author list seems better treated as global; next comes a prefix (the package name or the code author's name), then the actual name and finally the type of variable.
Full example.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\clist_new:N \g_mapo_allauthors_clist
\NewDocumentCommand\addauthor {m}
{
\clist_gput_right:Nn \g_mapo_allauthors_clist { #1 }
}
\NewDocumentCommand \printall { } { } % initialization
\DeclareExpandableDocumentCommand \printall { }
{
\clist_use:Nnnn \g_mapo_allauthors_clist { ~and~ } { ,~ } { ~and~ }
}
\ExplSyntaxOff
\usepackage{hyperref}
\begin{document}
\addauthor{Euclid}
\addauthor{Archimedes}
\hypersetup{pdfauthor={\printall}}
\section{Foo}
\end{document}

\spaceinstead of~– May 06 '16 at 05:40{ ~and~}{,~}{~and~}with{}{}{}; same error. – MaPo May 06 '16 at 09:55