Это сработало для меня без использования eval:
user> (defn mycar [x] (first x))
#'user/mycar
user> ((resolve (symbol "mycar")) [1 2 3])
1
Это работает, потому что resolves находит mycar var в текущем пространстве имен, а var вызывает функцию, с которой он связан. Это более короткая версия вашего первого примера. Я бы использовал его только для того, чтобы избежать использования eval.