Despite all of Emacs Lisp's faults, I don't think Haskell is a good substitute.* Haskell's design is centered around a compile phase, for static analysis and warnings. While this has advantages, it compares poorly with what elisp gives you - sure, it's a bad parody of a Lisp, but you can still rebind large portions of the system while working in it, with imperceptible downtime.
* I also don't like Haskell, but wouldn't suggest OCaml either. (Lua seems born for the role, though.) I got burned hard by settling in with XMonad, only to find out that they didn't care about portability ("avoid success at all costs") - BIG waste of my time. I went back to C for my window manager. C was more stable than Haskell!