There is an API for fetching pending transactions on the Ethereum network but only a few of the most recent. Is there a reason why? And is it possible to fetch all of them?

Pending transactions aren’t a globally synced list. So when a transaction gets sent to Infura, it will get load balanced to a node. And when pending transactions are looked up, the request might be load balanced to another node. If the pending transaction has not propagated to that node yet, you won’t be able to see it. We are in the process of creating a shared pool amongst the nodes we run here at Infura.