As egreg says, LaTeX starts the next cell before it realises that the table has finished. I realise that your real application is more complex, but a really efficient way to implement your MWE is using \prg_replicate:nn from LaTeX3 to produce:

Here's the code:
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\newcommand\mytable[1]{%
\begin{tabular}{|c|*{3}{c|}}\hline
\prg_replicate:nn {#1} {Number &1&2&3\\\hline}
\end{tabular}%
}
\ExplSyntaxOff
\begin{document}
\mytable{4}
\end{document}
Edit
Given the comment below, here is a more general approach that might be closer to what is required. It produces

from the input
\mytable{
{\one &1&2&3},
{\two &4&6},
{\three&1},
{\four &1&2&2}
}
where \one, \two, ... are some random macros.
The \mytable macro accepts a comma separated list of table-rows. By default the table has four columns but this can be changes with an optional argument so that, for example, \mytable[6]{...} gives a table with 6 columns. There is an obvious issue here with "dangling \hlines. This is easy enough to fix but as the OP does not gives details as to what is actually required there is little doing this without more information. For the reasons explained in the booktabs manual I'd drop the vertical rules and use \toprule and \bottomrule for the top and bottom rules, this would fix this problem and produce:

Here's the code:
\documentclass{article}
\usepackage{expl3}
\usepackage{booktabs}
\ExplSyntaxOn
\clist_new:N \l_table_clist
\newcommand\mytable[2][4]{
\clist_set:Nn \l_table_clist {#2}
\begin{tabular}{*{#1}{c}}\toprule
\clist_use:Nn \l_table_clist {\\\hline}
\\\bottomrule
\end{tabular}%
}
\ExplSyntaxOff
\begin{document}
\newcommand\one{One}
\newcommand\two{Two}
\newcommand\three{Three}
\newcommand\four{Four}
\mytable{
{\one&1&2&3},
{\two& 4&6},
{\three& 1},
{\four&1&2&2}
}
\end{document}