The problem with STM is that it adds significant overheads to modification costs. In a "classic" imperative programming language like Java or C#, stores to variables compile down to simple memory writes- very cheap. An STM memory write, by contrast, is 10x or 100x more expensive (depending upon particulars in how the STM is written). So in functional programming languages, like Haskell and Clojure, writes are rare, so the additional cost is minimal.
For example, consider the case where you're sharing a map of objects across multiple threads. The standard way to do that in Clojure is to drop an immutable map into a reference cell. Updating the map only requires one TM write- to the reference cell (one nice thing about immutable data structures is that you don't have to synchronize on them). A Java implementation would have a mutable map, meaning you'd have O(log N) TM writes. If each write takes a few hundred clock cycles, the difference between one write and several dozen writes becomes important.
I wrote about this more fully here:
http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/
I'm talking about Haskell, but most of my comments apply to Clojure as well.
Brian