> Since functions self-evaluate, FOO evaluates to itself
No, in Lisp FOO is a name of a function, not a function itself.
Thus FOO evaluates to a function (otherwise it would be an error) in a Lisp-1 like Scheme. In a Lisp-2 like Common Lisp, one would say that the function value of FOO is retrieved.
> Indeed, when strictly evaluating (foo '(1 2)), first the arguments are evaluated
Actually not. In Lisp the first item needs to be looked at first. If it is determined to name a function, then we can evaluate the arguments, of which there is only one in this case.