EmacsLisp is a surprisingly powerful, rich dialect of Lisp. It can be used to do many things, making it practically a general use application language, and not just a language for extending Emacs.
However, you will run into certain immovable walls the further you go:
- It is not, and presumably never will be, multi-threaded.
- Once you “throw” from an inner form, you can never return to that evaluation context. In other languages, continuations allow you to do exactly that.
- There is currently no way to start a process in the background, and direct its standard output and standard error streams to different locations.
- You cannot create a n-pixel tall line of whitespace (you can, however, create an n-pixel wide character of whitespace). This becomes important if you’re trying to use graphics in Emacs 21.
- There is no way to read to, or write from, device files on UNIX. In fact, there is no way to manipulate a file without its being related to a bufffer.
- Emacs Lisp is fairly slow, and there’s not much to be done about it. Converting key algorithms to C is an arduous process which requires rebuilding Emacs.
- Memory consumption gets out-of-hand REAL FAST if you don’t pay attention. If you’re writing a new library, be sure to turn on garbage collection messages by setting
‘garbage-collection-messages’ to t. If you see the collection messages every few seconds, you can be sure that your library is eating up and spitting out cons cells and strings at a furious rate.
- Emacs cannot disown a process it has invoked. The only way is to invoke your process through “/bin/nohup” on UNIX systems. See PersistentProcesses.
- Emacs Lisp is not Scheme. See SchemeAndLisp.
There is (currently) no facility for using functions from dynamic libraries at run time in GnuEmacs. You are stuck with whatever native functions were built into your Emacs. Everything else is Lisp, or byte-compiled Lisp.
There is a patch for Emacs, however. See DynamicallyExtendingEmacs. XEmacs supports dynamic linking , so this is not really an EmacsLisp issue.
Update: There’s a draft for threads in Emacs Lisp 
See also WhyDoesElispSuck