Some time ago, I wondered about coming up with a useful definition of "scripting language". I concluded back then that there isn't one. Any definition either ends up being so broad that you start including things you probably shouldn't (like ASM), or so narrow that it almost produces an empty set. Classical definitions, such as making scripting a synonym for interpreted, falls down as "modern" techniques like virtual machines and bytecode tend to blur the line between compilers and interpreters.
While browsing some of Paul Graham's essays, I started reading Being Popular, which discusses how programming languages get to be popular. One of the ways he suggests is:
Here, in my interpretation, Paul is putting forth a totally different defintion of "scripting language": It's whatever language you use to get stuff done under a given system.
Note that this definition cannot be used in a derogatory way. It makes no sense to lambast a system just because it's the one you use to get work done. It's entirely possible that the language is not the best for your work, but if you were to replace it with another language, then the new language would become your scripting language.
Paul also laments that LISP is not the scripting language for any existing system, save Emacs. The one system where it was, the LISP Machine, died out long ago. He also readily admits that LISP makes a poor scripting language in a Unix environment.
As it happens, I do know of a reasonably popular program that uses LISP as a scripting language: Zillions of Games, a generic AI engine that can learn to play many different kinds of games. A LISP-like language is available for users to define their own games. (And no, I don't work for them :)
"There is no shame in being self-taught, only in not trying to learn in the first place." -- Atrus, Myst: The Book of D'ni.