I think a big problem with H1-B is that it's hard to switch jobs. While an American engineer can easily quit and go somewhere else, a non-resident is pretty much forced to leave the country. This makes the worker's bargaining position very weak, and overall lowers the market rate for immigrants.