As someone with a fair amount of experience in high tech and software development, I'd argue that everything you wrote about Indian programmers could equally apply to American ones. Still, for the sake of argument, let us assume that you are right. There is still one overwhelming reasons why managers (i.e. PHBs) prefer Indian programmers (either in the USA or India). That is: ego (or the lack of it).
Let us face it: Indians in general are happy to do what they are told. They do not grumble that the work is not challenging enough, or too demeaning. They tend to stick with the company even they are not doing the most sexy, glamorous work. They don't mind following software development processes laid down by management (and in fact, from what I've seen, many of them actually find that preferable to `genius' type mind-to-keyboard) programming. They do not mind working on bugfixes. They do not mind working under the direction of other, senior people, especially if the senior people are Americans.
Compare that to the average American engineer you find, especially in Silicon Valley. Let us postulate for the sake of argument that they are all programming gods. But I'd also argue that you won't find a more ego-centric, arrogant, inconsiderate bunch of prima donnas outside an Italian opera house. They are great at early stage startups as they sling together large amounts of code quickly. But they are absolutely terrible at dealing with the `grindwork' required to transform the technology into a product. They complain. They whine. They blackmail the management ("Institute that process and I'm gone!!"). They quit at inconvenient times anyway.
I'd argue that unless you are doing something at the super-high end, you probably don't need everyone at that talent level. For the average tech company, a mix of 20% Americans and 80% Indians would probably be more than adequate. The PHBs know this. That is why outsourcing will continue unless the govt puts a stop to it by some means.