I believe when you say "withdraw" you mean "spend".
1. If your gap limit is set to 20, your wallet software will look at 20 consecutive addresses that have no transactions before stopping to look at additional addresses. So if you have a transaction in the 15th address, your wallet software will look at the 16th through 36th address for transactions before it will stop if none of any of the 16th through 36th addresses have any transactions.
2. Yes, it is common to spend coin in multiple different addresses in the same transaction. You can either choose which addresses you wish to spend from (based on the inputs) or can let your wallet software choose automatically based on your preferences.
There is no limit as to the number of addresses a HD wallet can have. However, at one point, you will start to experience performance issues once the number of addresses (used and unused when accounting for your gap limit) reaches a certain size. You can address this by having a hard limit to the number of addresses your wallet will generate, once you hit this limit, you can create a new HD wallet on a different machine. Once you have created an arbitrary number of HD wallets, you could depreciate the deposit addresses associated with the oldest wallet, and tell your customers to click a button on your website while logged in to trigger you to generate a new address to be associated with their account.