I've been curious about the practical applications of LISP as well. Pure functional programming, as I understand it, means no side effects. The issue with this is that procedural & OO programming lives off of side effects: screen displays, file writes, etc. How would you build a GUI application in something that shouldn't give you anything but an answer? I'm aware that it is done, of course (web servers, games, etc), but how you would do something like that escapes me.
You're absolutely right that many practical applications require side effects. What happens in Lisp is that the programmer tries to write as much purely functional code as possible and only resort to side effects when completely necessary. This approach greatly aids in code debugging and maintenance.