In the case of one .c file, there doesn't have to be an object file; you can go straight to executable "cc prog.c -o prog".
Python implements a caching scheme for .pyc files; maybe it's not a scripting language ...
If I were to venture an opinion on why C (in its usual implementations) is not a scripting language it would be:
- no interactive prompt (REPL).
- no reloading of code (other than clumsy, fragile, platform-specific shared lib mechanisms).
- no execution of "top level forms": a program's entry point is a specific function (main on hosted implementations). When, e.g., Lisp code is compiled, the effect of loading the compiled file is still the same as of the source file: the top-level forms (now in a compiled form) are executed one by one. (What's a "script"? A file with instructions to be run one by one.)
- no late binding; in fact, no program at all, unless all external references are satisfied. Scripting languages can run code that contains references to unknown global variables, or calls to unknown functions. These can be loaded late.