É uma solução mais longa, mas com menos parênteses, mais linear e mais simples, uma vez que você tenha entendido bem.
(->> [[["foo" "bar"] ["bak" "wak"]][["koo" "kar"]]]
(map (fn [x] (map (fn [y] (map #(str "X-" %) y)) x))))
versus
(->> [[["foo" "bar"] ["bak" "wak"]][["koo" "kar"]]]
((->> (partial str "X-") (partial map) (partial map) (partial map))))
ambos cedendo
((("X-foo" "X-bar") ("X-bak" "X-wak")) (("X-koo" "X-kar")))