Right now, we assign a user's wallet and balance separately from each other. Unfortunately, this results in leftover money that both us and the user can't access.
Let me understand this part, you mean you will keep the user's balance stored in the user's deposit address, correct? And because the balance is no longer sufficient for the transaction fee, you can't
access move it?
This method will be difficult for you in the end. Users will also not always withdraw ETH because they previously deposited ETH. They can withdraw into other cryptocurrencies and at different amount as well, unless you are not an exchange platform. You should set up a centralized hot wallet which is a common method CEX uses to store and manage user funds.
we need to find a solution that will allow us to generate separate user addresses for monitoring and deposits.
I also don't understand about this, is there an address that works as a monitor for other addresses. What I know, it's a smartcontract function.