Ответ 1
Из ClojureScript: Up and Running от Стюарта Сьерра и Лукера Вандер Харта, стр. 69:
Макросы применяются во время процесса компиляции. Они не существуют во время выполнения. Потому как компилятор ClojureScript реализован в Clojure, макросы ClojureScript должны быть написаны в Clojure, а не ClojureScript. К счастью, Clojure и ClojureScript почти идентичны когда дело доходит до манипулирования структурами данных, поэтому переключение между двумя языками не сложно.
Это означает, что макрокод выполняется в Clojure мире, а не в браузере, поэтому он должен быть написан простым Clojure.