With LaTeX3 macros, using a list of items instead of a variable number of arguments (which is not recommended in LaTeX) is rather easy.
Why not using a variable number of arguments? The main reason has been explained by David in a comment; another reason is in awkwardness of the implementation; one should start a recursion, store the last found argument and check for a left brace; if found continue the recursion, otherwise stop and output the result. Since the arguments need to be stored anyway, it's better to use one argument and implement the command by cycling over the entries.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\menu}{m}
{
\vwegert_menu:nnn { , } { #1 } { \emph }
}
\NewDocumentCommand{\xmenu}{O{,}mO{\emph}}
{
\vwegert_menu:nnn { #1 } { #2 } { #3 }
}
\cs_new_protected:Npn \vwegert_menu:nnn #1 #2 #3
{
% split the list at the chosen separator
\seq_set_split:Nnn \l_vwegert_input_seq { #1 } { #2 }
\seq_clear:N \l_vwegert_output_seq
% add `\emph` around the items (or what's desired)
\seq_map_inline:Nn \l_vwegert_input_seq
{ \seq_put_right:Nn \l_vwegert_output_seq { #3{ ##1 } } }
% print the result
\seq_use:Nnnn \l_vwegert_output_seq { $\to$ } { $\to$ } { $\to$ }
}
\seq_new:N \l_vwegert_input_seq
\seq_new:N \l_vwegert_output_seq
\ExplSyntaxOff
\begin{document}
\menu{foo}
\menu{foo,bar}
\xmenu[;]{foo;bar;baz}[\textbf]
\end{document}
We have a simple command \menu without options and a more powerful one \xmenu with which you can change the separator (leading optional argument) or the formatting (trailing optional argument); the trailing optional argument should be a command taking exactly one argument.
The working is:
Split the list into components; leading and trailing spaces will be removed.
Add to each element the chosen formatting (default \emph).
Produce each element of the list, with $\to$ between any two elements.

{}argumnets, optional arguments should be[]or here probably better a comma separated list within a single argument. – David Carlisle Mar 07 '13 at 14:49\ifnum\NUMARGS=4\endgraf: this I call a predetermined limit. – egreg Apr 21 '16 at 10:48\sigblockcan vary only between three and four. But what about the first example called\mymacro? Does the same hold there? I see no predetermined limit in it – User Apr 21 '16 at 10:54{is not scanned after having absorbed the last braced group as argument. This doesn't make for “full generality”. And it also gobbles spaces at the end of the job. – egreg Apr 21 '16 at 11:31