Would you use a LISP dialect for a production program?
Absolutely
What kind of program and why?
Lisp is a general purpose dynamic language. Today, it has the same basic difficulties as other general purpose dynamic languages that aren't published by Microsoft: Native threads, GUI integration, deterministic operation of the GC, and small memory footprints.
Native threads are achieved by LispWorks and SBCL, I believe. Possibly others? I have not investigated fully.
LispWorks and Franz Common Lisp - commercial products - integrate into the GUI to degrees of success. Not having the $$ to buy them, I don't know how well it works. I suspect they work quite well...
A deterministic GC operation can be done (it's done in Java to some level of success), but I don't know if existing Lisp systems (maintained ones) have any code to do that.
Small memory footprint I believe is achieved by some Lisps.
My basic point is, Common Lisp is technically ready to make production systems. And it does.
The vast majority of developers get freaked out by (pick one) dynamic languages, macros, parentheses, lack of favorite IDE, bad experience in college, not many jobs in it, and then don't use it.
Personally I'd jump at building a full-fledged production system in Common Lisp from the ground up in a team environment.
edit: I didn't really answer why Lisp as opposed to other languages.
In my Lisp experience - not significant, but considerably more than 'hello world' - I've found the language to be extremely usable after the first "Argh new language" pains. The majority of the language fits together in a very regular and fairly obvious fashion that I don't really find other languages to operate like. Part of this is the merging of expressions and statements. Part of this is the core list datatype. Part of this is the type system. Part of this is the macro system. Don't get me wrong, though, there are pain points. But they don't kick me in the face as much as other languages' pain points.
One simplistic example is Python's length-of-list routine. The Python approach is to call len(mysequence). But, if we think about it, a length is a property of a sequence. So, mysequence.len() is a more appropriate idea. Lisp essentially removes that syntactic distinction. (length thing) is both the function call syntax and the method syntax. Of course, some people find that frustrating and want the syntactic difference. I would rather have the regularity.
edit2: I converted the portion of my MS thesis that runs on the desktop to Common Lisp and it's been a pleasure to work with so far.