I think you're missing the logistics needed to do this:
1) to officially reject someone usually needs asking around to build consensus that regardless of any changes to org structure, to outstanding offers, to the current set of interviews, etc. that this person will not get an offer from the company. Information is usually not precise, and often partially missing in the interview loop. Most of the information is focused around the top candidates, so "maybe" tier candidates are less discussed and decisions are not really made on them. So then you have to talk to your manager, colleagues, HR, etc. to make sure everyone is on the same page. A mistake here is costly.
2) you usually make offers to the best candidate, and if they decline, move down the list. So to reject someone means that this best candidate has accepted the offer. But they get a certain amount of time to consider it (often weeks, sometimes months), when you're frozen. Then you have to remember to reach out to the rejected candidates (I guess you put it on your calendar, and someone has to ensure this happens). To do fast rejections, you need short acceptance timelines, which is offputting to some candidates. Why risk pissing off your candidates you're giving an offer to, to make candidates you're not giving offers to happier?
3) even if your best candidate accepts, something might happen before they start (they change their mind), or you find out within a week of their joining that they're problematic. If you didn't reject other candidates, you can still approach them and say "sorry, we originally didn't have a position for you, but now we do", whereas rejecting them "we're moving on" closes that door
4) I haven't even gotten to the legal or reputation repercussions if you reject someone and do it in a way that can be interpreted as a problem. You can't let any employee deliver the news. This all needs policies and coordination.