A macro is any control sequence (or active character) defined with \def, \gdef, \edef or \xdef. TeX macros support up to nine arguments, which contradicts your statement about it not having the notion of arguments to control sequences.
The most common usage of arguments is in the “undelimited” form; say that you do
\def\foo#1{--#1--}
so \foo takes an argument. When \foo is expanded at point of use, TeX looks for the next token; if it is { (a character token with category code 1, to be precise), then TeX looks for the whole list of tokens up to the matching } (a character token with category code 2, to be precise), then strips off the braces and replaces \foo{<...>} with
--<...>--
(where <...> represents the token list determined as specified). Otherwise the next token <token> is used for the replacement and one gets
--<token>--
So, for example, \foo{abc} and \foo x will result in, respectively
--abc--
--x--
Note that \newcommand in LaTeX uses \def with undelimited arguments, unless it has two optional arguments after the name of the command to define. The above definition in LaTeX would be
\newcommand{\foo}[1]{--#1--}
However, arguments can also be delimited; if we do
\def\foo[#1]#2{--#1--#2--}
then the first argument to \foo will be anything that appears between [ (that is required to follow \foo) and the next (required) appearance of ] at the same brace level; then the second argument will be determined as before. So \foo[x]{yz} will result in
--x--yz--
(the delimiter tokens will disappear, together with a possible set of outer braces, if it doesn't leave unbalanced braces).
LaTeX uses this feature for introducing commands with optional arguments. A definition such as
\newcommand{\foo}[2][default]{--#1--#2--}
will set up thing so that \foo{abc} and \foo[x]{abc} will result, respectively, in
--default--abc--
--x--abc--
Very basically, the above \newcommand defines two macros, \foo and \fooOPT; when \foo is expanded, TeX looks whether [ follows. In this case it is replaced by \fooOPT which is then expanded normally, having been defined as
\def\fooOPT[#1]#2{--#1--#2--}
If no [ follows, \foo is replaced by \fooOPT[default]. Actually, \fooOPT is \\foo (with a backslash in the name, but it's mostly irrelevant). The definition of \foo is (very basically):
\def\foo{\@ifnextchar[{\\foo}{\\foo[default]}}