- The compiler really isn't very effective, so doing expensive things is often tricky and takes a lot of fiddly optimizing to get halfway acceptable performance (this should get better when/if guile becomes the Emacs compiler).
- But the killer is the APIs and conventions that exists around the language. It's neat with how little code you can do some things using direct actions on buffers, and the various hooks make a lot of things sort of possible, but I've found again and again that things just don't compose, scripts trample on each other's toes, and trying to deal with dynamic scope (even with lexical scoping, lots of interfaces depend on dynamically scoped variables and concepts, such as the current buffer) when you're doing something asynchronous is a total nightmare.
http://www.gnu.org/software/emacs/manual/html_node/cl/Struct...
http://www.gnu.org/software/emacs/manual/html_mono/eieio.htm...
I remember nicferrier and others discussing how to write lazy streams for elisp in order to have a more functional text processing ~std lib.
All in all I agree with you that the extensions are weirdly integrated and fragile, maybe it's time to build a side-project emacs with better abstraction layers.
ps: What's make me so sad it that elisp editing api is really not lispy in nature. Language doesn't dictate good design...