It is indeed not possible to create an unsequence function using monads alone. The reason is:
- You can safely and easily create a monadic structure from a value using 
return. 
- However, it is not safe to remove a value from a monadic structure. For example you can't remove an element from an empty list (i.e. a function of the type 
[a] -> a is not safe). 
- Hence we have a special function (i.e. 
>>=) which safely removes a value from a monadic structure (if one exists), processes it and returns another safe monadic structure. 
Hence it is safe to create a monadic structure from a value. However it is not safe to remove a value from a monadic structure.
Suppose we had a function extract :: Monad m => m a -> a which could “safely” remove a value from a monadic structure. We could then implement unsequence as follows:
unsequence :: Monad m => m [a] -> [m a]
unsequence = map return . extract
However, there's no safe way to extract a value from a monadic structure. Hence unsequence [] and unsequence Nothing will return undefined.
You can however create an unsequence function for structures that are both monadic and comonadic. A Comonad is defined as follows:
class Functor w => Comonad w where
    extract   :: w a -> a
    duplicate :: w a -> w (w a)
    extend    :: (w a -> b) -> w a -> w b
    duplicate = extend id
    extend f = fmap f . duplicate
A comonadic structure is the opposite of a monadic structure. In particular:
- You can safely extract a value from a comonadic structure.
 
- However you can't safely create a new comonadic structure from a value, which is why the 
duplicate function safely creates a new comonadic structure from a value. 
Remember that the definition of unsequence required both return and extract? You can't safely create a new comonadic structure from a value (i.e. comonadic structures don't have return). Hence the unsequence function is defined as follows:
unsequence :: (Comonad m, Monad m) => m [a] -> [m a]
unsequence = map return . extract
Interestingly sequence works on simply monadic structures. So via intuition you might assume that unsequence works on simply comonadic structures. However it not so because you need to first extract the list from the comonadic structure and then put each element of the list into a monadic structure.
The general version of the unsequence function converts a comonadic list structure to a list of monadic structures:
unsequence :: (Comonad w, Monad m) => w [a] -> [m a]
unsequence = map return . extract
On the other hand the sequence function works on simply monadic structures because you are just folding the list of monadic structures into a monadic list structure by chaining all the monads:
import Control.Monad (liftM2)
sequence :: Monad m => [m a] -> m [a]
sequence = foldr (liftM2 (:)) (return [])
Hope that helps.