I think the fairly straightforward solution to the H1B issue is to tie it to a salary requirement, rather than a lottery/other subjective measures.
If I want to hire a software developer from abroad and I'm willing to pay him above-market rates relative to similar jobs, that should demonstrate that I'm hiring that person because of his skills/knowledge rather than trying to cut costs.