It's not hard to write your own faucet from scratch, using json-rpc and running your own node.
I made a proof of concept which you can use to study how to do this, you can use the code as a basis if you wish:
https://github.com/mocacinno/simple_testnet_faucetyou are correct in theory, but not in practice
faucet have very low profit margins
running a full node requires a (somewhat good) VPS. even running an SPV wallet (electrum) requires a VPS.
most faucets are hosted on shared hostings instead, with no ability to install/run custom software.
it's cheaper and it what's get the work done.