>>4
I use it in Common Lisp for parametrizing stuff (instead of using nasty globals like people do in C), it lets you override settings or various things in the scope of whatever code you want and doesn't break your other code. A similar use is when you want to change the behavior of some thread or of some specific function and all the functions called from that function within the scope of a particular call and not break everything else - it even works properly with threads (if supported) and conditions (unwinds properly).
I also use it as a more advanced technique in code generated by some macros (such as a locally special gensyms), but such (ab)uses are outside the scope of this thread (using dynamic scope on some variable is like treating the variable's value cell as a stack, but this is done transparently and safely for you by the implementation).