The main issue is that H1B workers have very little rights. If they get let go, they technically have to leave the country in the next 24 hours - the 30 day grace period is a myth. They are very easy to bully and put up with a lot of shit from their employer simply to be able to stay in the country.
One solution would be to grant an H1B that would be valid even after termination/resignation - maybe for a certain amount of time like a month or two. This would allow a worker to leave an unreasonable employer and give him a chance to find a new gig.
However, I also believe that there is no talent shortage in tech and the H1B program is used to try to drag wages down.