I'm often annoyed that between language theory and language implementation there is the trouble of lexing and parsing. Both are complex and take a lot of time and know-how (at least for me as they never work right the first time), and it's not until you have those done that you can actually work on language features.
Lisp is handy from it's data-is-code mentality it already has a general-purpose parser built in. It's something that is fairly easy to implement for functional languages which is much harder to implement for OOP languages.
Be glad you didn't go to school 20 years ago. I had to build a Lisp-1 REPL in Pascal on an IBM mainframe without a debugger for my programming languages class.
(I also had to walk to class barefoot in the snow uphill both ways)
McCarthy's original could give you macros, although they would be extremely cumbersome. I've been wanting to implement some sort of macro system in my minimal Lisp impl. http://github.com/fogus/lithp