For one thing, when you use a monad, you get hooked to it: the type constructors of the monad start to appear in the signatures of your function. Yup, that's the point![1] [1] Or rather, one of many points.
Monad is just the pattern where you combine Functors. Some Functors can be pattern matched upon to "escape" their values. Functors like IO cannot. IO would still be (academically) useful if not for its Monad instance... you'd just only be allowed a single effect in the entire program!