I believe erroneousBollock was referring to the fact that STM (preferably) depends on, not necessarily pure FP per se, but at least an enforced static typing model such that you can statically guarantee (in other words, guarantee at compile time without running the code) that a given block will not have any side effects other than updates to objects that the STM system can track. In other words, if I have a transaction under STM with optimistic locking, there's a good chance that transaction will have to be redone, and if it includes any calls to things like print or launch_rocket, well, that's a bit of a problem.
I admit I have not looked at STM implementations other than Haskell's. In the Haskell world they make a big deal of the fact that they use the type system to quite literally guarantee the transactions are isolated in this sense. Perhaps in the other languages that isn't considered as vital an issue.