Monads are a pretty general encapsulation/sequencing abstraction being useful for more than just IO handling in pure languages. Although to be fair, they are starting to show up in more mainstream languages (ie Clojure)
A Monad is just a theoretic abstraction, not a useable one. Only specific Monad instances (IO,Maybe,List,etc) can be "useable", hence "useful". There is no generic "bind" for example, it has to be implemented specifically for every Monad.
While Monads are pretty useful in pure languages, they are often over-engineering in imperative languages.
What I consider the actual point that the OO world is currently learning from the FP world is abstracting over computation. OO can abstract data and state, but computation is rarely modeled as an object. Monads are simply a pattern you can observe often, when computation is abstracted.