The distinction is determined solely by the prejudices of whomever is bothering to make it. Scripting is a domain in which a programming language is used, not some basic attribute of it. You could use C to write your system automation tools, but it would be a waste of time when a simple Bash script would get the job done quicker and in a far more concise manner. Likewise, you could write your virtualization software in Ruby but its going to be dog slow, and probably full of weird hacks to make shit work.
Programming languages are for solving problems, and depending on the problem you may need the higher level of abstraction provided by a so-called scripting language. Others are better served by getting as close to the metal as possible. Not every problem requires getting bogged down in the minute details of memory allocation, hardware IRQs, or chipset specific instructions. It might make it fast as hell, but you could easily get lost in the weeds and never end up solving the real problem at hand.