1. How do I sendtoaddress but from a particular address, e.g. 1 user sending another bitcoin , how can i specify it to come from their address/label.
2. Setting up users and assigning their addresses through 'labels' (as i know the account feature is gone, would be ok?)
You'd be able to generate receive addresses as required and simply assign a generated "deposit" address to a specific user in the database... If UserAAddress receives funds, then UserABalance = UserABalance + amount. If User A then wants to send User B funds, you simply alter the appropriate values in the database (off-chain). So UserABalance = UserABalance - amount... UserBBalance = UserBBalance + amount etc.
Should a user wish to withdraw funds from the service or send to an external address, you can then simply create a transaction from your master wallet, and it doesn't really matter what address the funds come from... you then simply debit the appropriate amount from the user balance... UserABalance = UserABalance - amount.
Obviously, this is a dramatic simplification of the setup, and you'd need to consider ways to minimise risk to the funds in your system wallet should your system security be compromised... most services tend to use a system of hot wallets and cold storage to achieve this.