Exchanges set their own fees because they are the custodian of your funds. They could charge you more or less than the network actually costs. Some exchanges charge a higher fee in order to ensure your transaction has priority over others that are trying to send coins at the same time. Some exchanges may charge you more than the network fee and pocket the rest. This behavior generally drives up the cost to transact on the network.
If you decide to become the custodian of your own funds you will have more control over the fee that you are willing to pay. With a little bit of patience and monitoring of the mempool you will find that it is rather simple to get a transaction confirmed with a fee at a fraction of what exchanges generally charge.
Also, FYI, because you mentioned Coinbase, you can actually send crypto on-chain transactions for free through Coinbase Pro (they pay for it).
Regarding, "I think you can't set a custom fee for a transaction" so how do they come up with their transaction fee? I imagine if they set it too high, folks won't want to use their service and won't make any money. – Dave – 2018-01-08T17:00:41.890
I don't know how they're working, it's better to call them in that special case. – Adam – 2018-01-08T23:08:51.837
Call them?? Lol! I think if they had a phone number that might have made it easier for this guy -- https://www.reddit.com/r/CryptoCurrency/comments/7p0rmh/i_still_have_not_received_my_27000_wire_reversal/
– Dave – 2018-01-09T15:10:43.270