And if they are, why not be user defined like Bitcoin. Here we go again. My question does not have enough words in it so I am just typing.
They are hardcoded in the wallet software, not the protocol. That said, the protocol expects a non-zero fee for each transaction. The Monero protocol does not do fee free transactions so that it can prevent node, and blockchain spamming. Nodes also have the option of deciding which fee paying transactions they will relay of not, and if an enterprising users wishes to recompile the wallet client to send lower fees they can do so and take their chances on the transaction propagating and being mined.
The code in question, can be found here