Hi Jeremy,
I seem to recall that monads really are necessary, and something tells me we've had this discussion before. Right now I can't quite wrap my head around it though.
Here's something that might be a clue:
instance (EmbedAsChild m c, m ~ n) => EmbedAsChild m (XMLGenT n c) where
asChild m = asChild =<< m
Basically that's 'join' - the hallmark of monads over applicatives. This instance is what makes nested child tags work, and could not be written for a generic Applicative. However, it's not immediately clear that this particular instance couldn't be written once for each data type. We already know it can be written for all monads. Could it be written for the Applicatives you want to use?
Cheers,
/Niklas