EDITED to remove the deficiency of the prior approach.
If you don't mind changing your syntax in the following ways:
Change your symbolic-argument identifier from # to something that is not cat 6, here done with !
Define the new command with \symbolicnewcommand, since \newcommand is already defined with a different syntax.
Thus, the syntax is something like:
\symbolicnewcommand{\foocommand}%
[!normal,!bold,!italics,!smallcaps,!emphasis,!boxed]%
{!normal{} \textbf{!bold} \textit{!italics}
\textsc{!smallcaps} \emph{!emphasis} \fbox{!boxed}}
Unlike my prior approach, this approach doesn't merely mimic the \newcommand behavior, but recreates it, by converting the symbolic arguments into explicit #1, #2, etc., (i.e., NOT placed inside a \def).
Here is the MWE. Note that in the \meaning of the defined macro, the symbolic arguments, for example, !normal, is converted into an explicit #1.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{listofitems,tokcycle}
\newtoks\mytoks
\newtoks\tmptoks
\def\OPENSgroup{\OPENSgroup}% quark
\def\CLOSEgroup{\CLOSEgroup}% quark
\def\SPACEquark{\SPACEquark}% quark
\newcommand{\addtotoks}[2]{#1\expandafter{\the#1#2}}
\newcommand{\xaddtotoks}[2]{%
\expandafter\addtotoks\expandafter#1\expandafter{#2}}
\makeatletter
\long\def\symbolicnewcommand#1[#2]#3{%
\readlist\arglist{#2}%
\stripgroupingtrue%
\tokcycle{\addcytoks{##1}}%
{\addcytoks{\OPENSgroup}\processtoks{##1}\addcytoks{\CLOSEgroup}}%
{\addcytoks{##1}}{\addcytoks{\SPACEquark}}{#3}%
\mytoks\expandafter{\the\cytoks}%
\foreachitem\z\in\arglist[]{%
\expandafter\setsepchar\expandafter{\z}%
\expandafter\def\expandafter\tmp\expandafter{\the\mytoks}%
\readlist\cmdlist{\tmp}%
\mytoks{}%
\foreachitem\zz\in\cmdlist[]{%
\ifnum\zzcnt=1\relax\else%
\tmptoks{&}%
\xaddtotoks\tmptoks{\zcnt}%
\xaddtotoks\mytoks{\the\tmptoks}%
\fi%
\xaddtotoks\mytoks{\zz}%
}%
}%
%
\setsepchar{&}%
\expandafter\readlist\expandafter\cmdlist\expandafter{\the\mytoks}%
\mytoks{}%
\foreachitem\z\in\cmdlist[]{%
\ifnum\zcnt=1\relax\else\addtotoks\mytoks{####}\fi%
\xaddtotoks\mytoks{\z}%
}%
%
\expandafter\addBracesSpaces\expandafter{\the\mytoks}%
%
\def\tmp{\newcommand{#1}[\arglistlen]}%
\expandafter\tmp\expandafter{\the\mytoks}%
}
\newcommand\addBracesSpaces[1]{\mytoks{}\fooaux#1\endfoo}
\def\fooaux#1{%
\tctestifx{\endfoo#1}{}
{\tctestifx{\OPENSgroup#1}{\Z}
{\tctestifx{\SPACEquark#1}{\addtotoks\mytoks{ }}
{\addtotoks\mytoks{#1}}\fooaux}}%
}
\makeatother
\def\Z#1\CLOSEgroup{\addtotoks\mytoks{{#1}}\fooaux}
\symbolicnewcommand{\foocommand}%
[!normal,!bold,!italics,!smallcaps,!emphasis,!boxed]%
{!normal{} \textbf{!bold} \textit{!italics}
\textsc{!smallcaps} \emph{!emphasis} \fbox{!boxed}}
\begin{document}
\meaning\foocommand
\foocommand{To be,}{or not}{to be?}{That}{is the question.}{123}
\end{document}

\foocommand{one}{two}{three}{four}{five}, with no indication of what their components mean? Or would you rather have\foocommand{bold=two, smallcaps=four, emphasis=five, italics=three, normal=one}? – Werner Jun 16 '20 at 16:34namedefpackage installed, otherwise check it out here. Section 4.1 of the documentation (“Extended \newcommand”) features an interface like the one you want. – Phelype Oleinik Jun 22 '20 at 11:39