Finding first match in recursive search
If the non-nil results of do-something are guaranteed to be logical true, you can easily use some:


  (some pred coll)  
  
  Returns the first logical true value of (pred x) for any x in coll,
  else nil. One common idiom is to use a set as pred, for example
  this will return :fred if :fred is in the sequence, otherwise nil:
  (some #{:fred} coll)


(defn find-first-3
  [do-something range]
  (some do-something range)
)


If you expect do-something to return false as possible, non-nil value, you could use keep:


  (keep f coll) 
  
  Returns a lazy sequence of the non-nil results of (f item). Note,
  this means false return values will be included. f must be free of
  side-effects.


(defn find-first-4
  [do-something range]
  (first (keep do-something range))
)


As for the chunk-issue: You should not bother if you're not hitting any performance issues or other problems. Otherwise, if you really want to get rid of it, the unchunk-trick you mentioned is totally fine IMHO, until Clojure will offer an official, built-in option (maybe it will someday).