- John Ousterhout's original 1998 paper on scripting languages at http://home.pacbell.net/ouster/scripting.html
- ActiveState's 2004 updated paper on dynamic languages, with good points on why such languages are useful for much more than "scripting" at http://www.activestate.com/Company/NewsRoom/whitepapers_ADL.plex
[Three examples of approach in conventional Java-oriented application development: "Tcl your Java apps"  and "Tips for Scripting Java with Jython" http://www.onjava.com/pub/a/onjava/2002/03/27/jython.html] and, by same author, "Introduction to Jython" .][Much need interesting write-up of hardware-oriented embedded examples--space shots, submarines, factory controllers, ...]
Scripting vs. programming: I'm not sure whether there is a clear distinction - certainly you can do both in Tcl. Maybe the following criteria make sense (RS):
- Scripting: single file, few or no procs
- Programming: Structuring with libraries (auto_index or package); almost every code is in procs
"Adding Tcl/Tk to a C application" is important reading that explains the inapplicability of common scripting notions.
"Why Scripting Languages Represent the Most Important Part of Open Source Movement" 
"Why Scripting" touches on the value of "dual-level" programming.
We call them Dynamic Languages now. :-)