How are bip44 coin identifiers assigned?
BIP44 is more like a standard which you are supposed to follow. The coin id's assigned are way to standardise the approach in case you are making a wallet and want better segregation of your coins.

For example, with the same seed, you can derive keys for different cryptocurrencies, just by changing the coin  id. Do note all those ids can be used to generate addresses for only one crypto as well.

Basically it is trying to maintain some nomenclature in this open source community. There is no code in the source code specifying this.
As a matter of fact , the address and private keys generated are backwards compatible to a node version not having the HD wallet implementation.

Address generation is something which the bitcoin core software provides, however anyone can write their own code for address generation as long as it follows the guidelines for address generation.