A monad is a kind of control structure between functions. Kind of like if you could overload add extra hook functionality to the Unix shell pipe, besides just piping stuff along. For instance, seed it with a countdown, and every time stuff is piped to another process, see how much time has elapsed; if at any point it's been more than, say, 30 seconds, just stop the whole series and return an error. Or find a path through a maze by backtracking every time it hits a dead end, returning to the most recent unexplored path.
They're a necessary workaround to do some stuff in pure functional languages (which is why Haskell users make such a big deal out of them), but you can do some really cool tricks with them.
(NB: This is a really vague summary. I found this OCaml-based monad intro helpful, because it mostly avoids entangling the monad concepts with unrelated issues in Haskell.
http://enfranchisedmind.com/blog/2007/08/06/a-monad-tutorial...
There's a good Monads-in-Scheme intro, too, I forget where.)