Fundamentally, testnet ETH has utility. It is useful in the sense that it can be used to perform work and it can be used to store data. The main way to keep it free is to have an unlimited supply or keep this perception that it is unlimited. Any friction in trying to obtain testnet ETH for any reason will cause someone somewhere to start assigning a real value and a price to that testnet ETH. This is basic supply and demand.
Unlimited testnet ETH has some cons. One of them being the ability for someone to spam the network and potentially deny others from using it. Another one is the ability, in a permisionless consensus layer, to spin up a large amount of validators and break the consensus layer with different levels of majority in the validator set. There are various ways to deal with a malicious actor who is trying to spin up a large amount of validators and that will be visible many weeks and months in advance with the current activation queue.
The relation between the desire to keep it free and the need to have at least a perceived unlimited supply is a tenuous one. The obvious solutions are to limit supply and/or assign a price above free to testnet ETH. A lot of efforts and energy has been spent in trying to limit supply and find a fair way to perform distribution. Even if we like to say that testnet ETH should be free, the most successful methods for distributing testnet ETH right now force a cost on the user requesting it: time, CPU, third party verification, etc. An unpopular solution that would likely solve many issues around this would be to assign a very low base price to testnet ETH. It could be something like 0.01 USD per 10 testnet ETH. I suspect there might be even better cost or price solutions to be explored.
On the supply side, seeding or initializing a testnet with a large amount of ETH, let’s say 1000, in every wallet address that has ever received or sent a transaction on mainnet or any testnet might be a nice way to seed the distribution. It has a few risks and cons too. It isn’t fair to new developers for instance. It would still need a nice way to distribute new testnet ETH. Faucet distribution is still very hard for any faucet who is going to try to distribution any large amount.