There's some overlap, as well as actor/message-passing concurrency (Erlang), dataflow (Prolog, Oz, etc.), constraint, vector-oriented (APL), etc. Probably a dozen more, depending on where you draw some fine lines. (See CTM for a good overview.) FWIW, Prolog is just as homoiconic as Lisp, and has compile and runtime macros.
Still, I was more wondering about teaching methodology, not enumerating paradigms themselves. What could be done to counteract the "standing on the toes of giants" effect?
If I understand correctly, I'd imagine teaching everyone to implement languages using a system like Ian Piumarta's COLA might do the trick. The point is to break open these black boxes of abstraction (even though black boxes are good sometimes).
Still, I was more wondering about teaching methodology, not enumerating paradigms themselves. What could be done to counteract the "standing on the toes of giants" effect?