I see lots of good ideas about changing the selection process. Another option is to change is to change the new hire process and require employers to advertise every recent H1B hiring decision for 60 days, including job description and resume. Then a native with an equal or better resume, and a willingness to fill the role, can raise their hand and offer to replace that person. If a native with a better resume is denied, then it is a cause for action against the employer (ideally a fine paid to the applicant that would at least fund further search time). Repeated violations would result in wholesale revocation of H1B access.
Or just require H1B workers to be paid above average (by some factor) for the position. Average pay for <workplace> is 50k? If you want a foreign worker, you must pay them at least (eg.) 1.2x the average, so 60k. This solves the problem of abuse (since they'll probably find a local for 55k), and solve the genuine need for foreign workers in areas where there are not enough locals (eg. touristy areas needing tourist workers) ... at a bit higher price of course.