Everyone is pointing out that Lua is good in the gaming space. It is. However I personally don't place its limits there.
As others have said, Lua is small, fast, and completely cross-platform (wherever there is an ANSI C compiler, anyway [they're everywhere]).
It also benefits from several clever enhancements which affect performance. Its "table" type mechanism automatically detects whether to handle a particular table as an array, a hash table, or both.
Lua has incremental garbage collection, which means that pauses to find and collect now unused data are kept to a minimum. This is completely configurable at runtime too (eg. you can pause the garbage collector during time-critical code sections).
When efficiency or system-interfacing tasks are required, Lua has a clean stack-based C API, which allows you to both embed it inside larger applications, or to extend it, through writing modules.
The fact that Lua manages at once to be so advanced, and small, and appear so simple to the user really is what I admire about it. Most people can pick it up in less than a day, the reference manual is short, the online guide and book simple to follow, and the community is wide and is experienced in a range of fields (not just games, thankfully).
Lua is therefore my choice of language for nearly all projects (mixing with C when necessary). I use it daily for this reason :)