Я догадался, что #lang вы имели ввиду директиву Racket (или что-то подобное).
Но проблема же в том, что язык программирования - это интерфейс человек-машина. И если язык с точки зрения машины изучен великолепно, то с точки зрения человека - крайне паршиво. Скажем, все бросаются автоформатировать код, совершенно не понимая, чем один стиль лучше другого (или может быть он хуже? даже критерии никто не знает).
А проблема Лиспа в том, что он плохо читаем человеком (а машиной отлично). Частично это исправляется блочной структурой, но явно недостаточно. Раскрашивание вроде помогает. Может быть ещё что-то?
И когда вы строите DSL эта проблема восприятия встаёт в полный рост.
DSL ведь как раз и создаются, чтобы проблема восприятия не стояла так остро. DSL, в основном, это про выразительную нотацию, взятую из предметной области. И в том же Racket есть какие-никакие, но рабочие средства создания DSLs. Авторы в статье по ссылке выше честно признаются, что макросы и прочее, что сейчас есть в Лиспе — полумеры.
Когда я пишу, скажем, в PLT Redex, то я создаю правила логического вывода прямо в нотации Генцена, даже разделительные линии приходится рисовать ASCII-графикой :) При этом семантика выполнения у PLT Redex отлична от обычного Racket и даже для любителя различных прологов там есть, от чего прийти в восхищение :)