まだ実力があんまり測れないなぁ。値の取得が <std::string, Symbol*> ってあたりからすると、毎回文字列からシンボル引いてるの?
そうだとすると、処理系製作するには Lisp の知識というかカンが不足してる気がする。普通の S 式はシンボルのツリーになるから
実行時に文字列からシンボルをいちいち引いたりしない。あと GC はどんな方式?

C# や C++ のテンプレートライブラリが使えるのに S 式の解析がつらいとか、技術レベルがちょっと
ちぐはぐな感じ。やる気はありそうだから、やっぱ作る対象もちゃんと勉強したほうがのびると思うよ。
いろんな言語で同じ水準の半端 Lisp を実装するより、まず腰を据えて Lisp に取り組むするほうがオヌヌメ。