How to reduce the amount of transactions with handling wallets? i'm working on a Web Application that will allow users to deposit Bitcoin into their own wallet, leading to a service that invests their funds in X(lets say alt-coins).i'm having issues on how to approach this.

So, if i'm not mistaken it will go like this:

Bob deposits BTC to wallet W => W sends to service S => Bob wins money => S sends funds back to W.

Until bob has funds again it takes 2 transactions

If the goal is to minimize fees by reducing the amount of transactions,
Would you create a private key for each of the users? or is there a way to create different public addresses that point to the same private key?
I Thought about initially giving Bob the option to deposit directly to the service S but the whole idea is giving funds to more than one service.

Thanks for any advice.
Since your service will control the wallet it is not necessary to do the actual transfer out of the wallet to the service, just show the user a lower balance and do not let them spend or withdraw more than this. This means that your service will have to maintain strict control of the private keys. Also, if you maintain a backend float BTC balance, you can show the user an increased balance immediately without waiting for a return transaction to process. To do this, effectively you will need to control all addresses used by your service. This amounts to virtual wallets.

A note on security, there have been previously several high profile services which hold a balance for users, which have been hacked so you will need to ensure your entire security regime is "A" Grade across your entire organisation.