for sending money we use private key
You always need to sign transaction with the corresponding private key(s).
There is NO other way to send BTC's from one address to another.
but with private key we can not have control for fee similar to what we do in send money; we don't have any option to change sat/byte in order to have lowest fee.
You ALWAYS have control over the fees.
In cases where you don't have control over the fees, the user interface doesn't let you choose the fee. But the system/program/wallet itself has to set a fee.
To be more precise, the fee is determined by the difference of the inputs and the outputs (fee = sum of inputs - sum of outputs).
If you somehow cant set the fee, switch to a desktop-/mobile-/hardware- wallet. Those almost always do allow to set a specific fee.