what is stopping it from just collecting the top few vMB (like the default 300vMB) of transactions, and then only verify those transactions after the IBD is done and discard or keep them accordingly?
You can do so, if you really want. The software is just not written in that way. There are many ways to optimize things, for example you could download things backwards, and start from the last block. Then, initially, your node would have SPV-level, and it would keep downloading things, proving that everything is correct, and is more and more deeply confirmed. And finally, you could reach the Genesis Block, and be sure that everything is valid. The only reason why it is not the case, is that nobody implemented it in that way, and you have only full nodes, or SPV nodes, and you don't have for example "SPV nodes, which are gradually converted into full nodes".
Also, in the same way, technically you could have things like "unprune blocks", which could allow going from 1 GB last blocks, for example into 100 GB last blocks, without waiting for 99 GB new blocks, but you simply don't have such features, because nobody wrote it in that way (even though it is possible to do so).