But that's completely understandable. (Inb4 personal attacks, I'm a drop-out myself, and my first job, that I had for almost a year, paid $500 a month.)
Consider asymmetry of information. There were two versions of you: (1) fresh uni drop-out, and (2) uni drop-out with programming experience and open-source contributions. These descriptions summarise information that potential employers had about you. You also was a hard-working and intelligent person the whole time; however, employers didn't have this information per se, because they had no simple way of being sure of these characteristics.
However, these characteristics are what employers are looking for. Now, information (1) gives almost no certainty that you have these characteristics: there are a lot of top programs drop-outs out there, and an employer would have to go through hundreds of them and spend a lot of time and effort on evaluating them to find one you. On other hand, if employer limited search to someone who fits (2), the odds of finding a person with these characteristics would be much higher, and the interview process would be easier.
> I have little sympathy for companies that choose to operate that way.
Are you really surprised that (2) got a lot more offers?
Do you really think that employer should be "fair" to potential employees, if that decision costs him (and his shareholders) more money? In other words, do you think that for a for-profit business, social obligations (in this case, to an intelligent drop-out) should be more important that obligations to their investors and shareholders?
Essentially, that's one of the reasons experienced developers get so much money: it's actually _cheaper_ (consider not only the cost of hiring process, but also the potential cost of a bad developer working in your team) to hire someone you can be relatively sure from other factors is intelligent and hard-working than trying to find such person from a wider pool.