I work on the business end of a blockchain development company. So I may not be the best at explaining this but I'll try. So when a new customer is created they are assigned an address. This is recorded in the SQL database under their account. The customer can create a new address. The database keeps track of all the addresses and to which customer they belong. You will have to configure the notifications to know when a transaction comes in and assign it to the customer based on which address.
Yes. It's all in the same wallet. If I access bitcoind directly and not through the software, I would then be able to send all the coin out from one wallet and not each individual address.
I'm sure I've butchered the technical details but this should give you a general idea of how it works from a layman perspective.