I've used clojure.walk/postwalk
to accomplish this.
(defn transform-keys
"Recursively transforms all map keys in coll with the transform-key fn."
[transform-key coll]
(letfn [(transform [x] (if (map? x)
(into {} (map (fn [[k v]] [(transform-key k) v]) x))
x))]
(walk/postwalk transform coll)))
The first argument is a function that takes the existing key and returns the new one. In your case, you can convert the keyword to a string, replace the underscores with hyphens, and convert it back into a keyword.
https://gist.github.com/jeremyheiler/fe9256e540121e771285