People, by-and-large, like magic. People want appliance-like technology that they don't have to understand. It is not Microsoft's fault (or Apple's, or Google's, or IBM's, or Nintendo's, for that matter.) People have wanted appliance-like computers since before there were computers.
The computer-like devices in speculative fiction novels from the early 20th century (written by, and for, the nerdiest of nerds) almost never resembled "general-purpose computers"; they mostly envisioned something roughly combining Skype, a wiki, and Siri. Englebart's Mother Of All Demos is a good example of what people were dreaming about: fluid communication and information sharing/retrieval. "Programmability" was never really a feature given much concern, even by the most idealistic futurist. People just don't want programmability. They don't lust after it like they do other whiz-bang features. They don't dream of a world where your tablet can be used to write programs that run on your toaster.
As for why...
As far as I've observed, programming a computer is, to most people, a mind-numbing consideration; a complex task, with a lot of rules to understand, facts to memorize, considerations to hold in one's head, and requiring heavy rigor. It's Engineering, in other words.
Most people aren't engineers; there is a specific mindset required, and most people don't seem to like being in that mindset, let alone staying in it for long enough to get good at using it. It seems to come down to "logical thinking" (or "System 2" thinking[1], or "Formal operational" thinking[2].) From what I've seen in trying to teach people to program, for most people, it hurts--possibly as far as causing an actual headache--to engage in rigorous, conscious logical analysis. People both try to avoid it for as long as possible, and to escape it as quickly as possible once they've started.
We--I don't know which "we", maybe "hackers" or "engineers" or "nerds" or some other term--we here don't seem to have this problem. Logical thinking comes simply to us; we get jobs requiring almost constant use of it, and then we engage in it in our off-hours as well. We might never stop using it. We are a minority.
This is why I say that "programming literacy" is a bad metaphor for becoming skilled at programming: "literacy" is something that (excepting learning disabilities) everybody is equally capable of attaining. Imagine if 90% of the population--forced to practice reading for years--could still only manage to read five or six words per minute, and doing so for 20 minutes or so caused them to need to take a walk outside to "clear their head." That's what happens to the "bottom hump" of the bimodal distribution in a CS101 class--and they're the ones prequalified by being in a CS101 class; the population at large does even worse.
So, there is no reason the average computer needs (serious) programming tools pre-installed on it, since there is no reason to expect the average person to want to be a programmer. Sure, programming tools should be made available to anyone who wants them, from a young age--as should supplies for any other craft a child might want to explore (paints, a keyboard, clay, a chemistry set, etc.) But every computer these days has the internet--and most of them even have app stores!--so it's easy enough to find, and then download, something like Shoes or Scratch if you want to play around and learn. I could even see including a learning environment like that (or maybe something more like Hypercard; if only~) with the OS, for the same reason Windows ships with MSPaint, and OSX ships with Garage Band.
But shipping Visual Studio, or XCode, or even gcc, with a computer, is more like giving everyone AutoCAD than giving them MSPaint. It's silly and overkill: only 0.1% of the population would even know what it was if they accidentally managed to get it open. Of those, most of them wouldn't be at a level to understand it anyway; they would need something easier to start with.
(All of this is separate from the "the system relies on the compiler toolchain to build or update parts of itself, so it needs to be there" argument. You might need to ship gcc with your OS, and might even use it to compile packages the user installs (i.e. in Gentoo), but that doesn't mean the user should be aware of--or care--that compilation is going on. Nobody notices that the .NET framework ships with a compiler (ngen.exe) which is then used to locally compile all the .NET stdlib modules in the background after installation; it just happens. You don't think "I have a CLR compiler on my system" when you install the .NET framework; you only think that once you've installed MSVC, because that gives it a user-accessible UI.
The same goes for "system runtimes"--the only thing anyone is recommended to do when their OS includes a copy of Ruby (usually for the sake of executing system scripts written in Ruby, not for the user) is to install a fresh copy through RVM and avoid the "system Ruby" like a plague. If it's so distasteful to the language's programmers, why are we as OS builders even exposing it to them? Stick the binaries in sbin instead of bin; that's what it's for.)
[1] http://en.wikipedia.org/wiki/Dual_process_theory
[2] http://en.wikipedia.org/wiki/Piaget's_theory_of_cognitive_de...