Olá Cesar, tudo bem?
Eu também estava fazendo a aula e cheguei numa forma que evitamos essa parada no nil da seguinte forma:
(defn meu-mapa
  "Simula um map sem retornar valor algum
    apenas aplicando a função no elemento"
  [function elements]
  (if (seq elements)
    (do
      (function (first elements))
      (recur function (next elements)))))
A razão é que ao invés de fazer (not ( nil? valor)) podemos tentar transformar o valor em uma sequência, pois ai temos uma coisa bem interessante que é:
(println (next '(1))) ; O resultado associado é nil
(println (rest '(1))) ; O restulado associado é ()
(println (seq nil)) ; Seq de nil -> nil
(println (seq '())) ; seq de () -> nil
E dessa forma conseguimos garantir que caso não seja uma sequência interrompemos a execução :)
Fazendo alguns testes:
(meu-mapa println [ false 1 2 true 3 nil 4 5])
false
1
2
true
3
nil
4
5
E funciona corretamente :)
Abraços e Bons Estudos!