I think we can all agree that its generally bad style to have game data in the games code. You dont write C++ code for each and every piece of game data( i hope? ), be it a level, a 3d model, an image or other resources, you just program a simple way to load a resource into the game.
For example, you dont hardcode key-bindings, you put them in a text-file and load it at runtime. Basicly it would be unwielding to recompile the game in order to change the key bindings.
Similarily, you wouldnt want to reprogram warcraft III to use a custom map, would you?
Now, scripting takes this just one step further by factoring not only data itself but also code that is specific to a given piece of data (for example an AI script, or a map trigger for a specific quest etc ) out of the game.
With this improvement you can now add custom spells or monsters with new AI or abilities to an RPG without re-compiling the game.
Im trying to make an RPG and ill be damned if im gonna write all the dialogue scripts myself/define all the items monsters etc, i dont have the creative talent for that. With easy scripting the more creative people can help the development.
Sorry if i was a bit unstructured/repeated myself a bit in the above, but thats the nature of a rant