I think that's the root of what made Lisp different: building a bootstrap implementation in another language was not difficult(1), so implement more complex language features in Lisp itself was possible.
If you take this further, it's quite a powerful concept: since even fairly primitive language features are implemented in a high-level and you can manipulate the AST much like you can manipulate any other data structure, you can change the language in non-trivial ways to suit your problem.
Chapters 4 and 5 of SICP demonstrate this in detail and introduce metalinguistic abstraction not only as a powerful technique in it of itself, but as a technique for teaching students about many other aspects of computer science (introducing a register-based virtual machine, compilation, and garbage collection -- all without leaving a higher-level language):
(1) Shameless plug: here's my own implementation in OCaml based in part on jmc.lisp by pg and on a C implementation by another HNer -- https://github.com/afeinberg/ocaml-tinylisp
http://www.paulgraham.com/rootsoflisp.html
http://lib.store.yahoo.net/lib/paulgraham/jmc.ps (I noted Preview.app was having transient issues loading this specific postscript file, so I converted it to pdf -- http://behemoth.strlen.net/~alex/jmc.pdf )
Most important, here's the code a Lisp interpreter in Lisp:
http://ep.yimg.com/ty/cdn/paulgraham/jmc.lisp
I think that's the root of what made Lisp different: building a bootstrap implementation in another language was not difficult(1), so implement more complex language features in Lisp itself was possible.
If you take this further, it's quite a powerful concept: since even fairly primitive language features are implemented in a high-level and you can manipulate the AST much like you can manipulate any other data structure, you can change the language in non-trivial ways to suit your problem.
Chapters 4 and 5 of SICP demonstrate this in detail and introduce metalinguistic abstraction not only as a powerful technique in it of itself, but as a technique for teaching students about many other aspects of computer science (introducing a register-based virtual machine, compilation, and garbage collection -- all without leaving a higher-level language):
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#...
(1) Shameless plug: here's my own implementation in OCaml based in part on jmc.lisp by pg and on a C implementation by another HNer -- https://github.com/afeinberg/ocaml-tinylisp