Wallet, deposit and withdrawal management system or APIs
Although certain coins have a few available API providers (such as BitGo for Bitcoin), any sane and security conscious company should elect to run their own nodes for each supported currency, manage their own keys, and have their own wrapper to handle deposits and withdrawals by interacting with the nodes.

This is especially relevant for coins like Monero and ZCash, where third party API providers may not be able to view transactions related to your business at all due to privacy protocols.

Once you have the infrastructure in place, the flow you described is essentially correct - you assign an address (or address+memo) to a user, and treat all incoming deposits to that address as coins belonging to that user.