You can change jobs but it requires going through a bureaucratic obstacle, and if you ever find yourself without a job temporarily, you'd better find a new one _very_ fast or you're deported. Worse, switching jobs can make it a lot harder to get a green card since it resets. H1-B holders seem to find it hard to switch jobs which is why big companies like Cisco are are able to accumulate so many of them. They just park themselves at a big company and try to keep their head down and wait out the green card process.
With more flexibility afforded to H1-B holders to find a real market-rate job, many of the perceived problems of the program would go away in my opinion.