You’re right, it could be done that way, but for the orgs that do use leads, it would mean a lot of repetitive filtering on pretty much every business process. The difference in functional concept between a lead and a contact are great enough that processes (both software and human) between the two rarely overlap. A foreign key does all of this for free. For this reason, I think they made the right choice, especially since the orgs that do not like the concept of leads can just simply not use them.