It is higher-order, but it doesn't deal correctly with a number of
cases. You have basically rediscovered the "upward funarg problem."
Google for the paper "The Function of FUNCTION in LISP" by Joel Moses
for more details. A partial solution for these problems are dynamic
closures, as in Lisp 1.5 and some other early Lisp dialects, and
ultimately true lexical closures, as in Scheme, Common Lisp and most
later Lisp dialects.
My website: http://www.yqcomputer.com/
Common Lisp Document Repository: http://www.yqcomputer.com/
Closer to MOP & ContextL: http://www.yqcomputer.com/