The following expression prints {{1234}} and returns {{1}}:
(first (mapcat #(do (print %) [%]) '(1 2 3 4 5 6 7)))
The reason is that {{(apply concat args)}} is not maximally lazy in its arguments, and indeed will realize the first four before returning the first item. This in turn is essentially unavoidable for a variadic {{concat}}.
This could either be fixed just in {{mapcat}}, or by adding a new function (to {{clojure.core}}?) that is a non-variadic equivalent to {{concat}}, and reimplementing {{mapcat}} with it:
(defn join
"Lazily concatenates a sequence-of-sequences into a flat sequence."
[s]
(lazy-seq (when-let [[x & xs] (seq s)] (concat x (join xs)))))