It really is not necessary to use a multiforest design unless you plan on having multiple physical locations (even then, you can accomplish it with AD sites & Services). You may not want to add unnecessary complexity to your AD design unless you are forced to.
If you use MS Exchange Enterprise Edition, you really have no limit to the number of accounts you can host. The typical desire is to split customers into different storage groups, and this does make some sense. the best leverage is to seperate your largest customers into their own storage groups along with some other smaller customers. Each server does have a limit (I think 6) that it can have, and you always want to leave one open so that you may mount a Recovery Storage Group if necessary.
as far as specifics on how to host multiple domain names in exchange, I have posted the basics of how to do multiple domain name hosting in this thread here:
This post does not address any of the issues of security, Address book restrictions or AD setup. Of course I said I wouldnt post a microsoft link, but instead of confusing the issue, the core of it is here:
Once you have decided on an AD structure it is very easy to generate scripts that will automatically create the Customer OU in AD, as well as create the individual customers.
You will need to handle what Exchange information your users have access to as well (address books). I have found that the best/easiest way to do that is by modifying the users msExchQueryBaseDN inside of ADSIedit. I have attempted to create individual address books for each of my customers, and assign those to each, but have not had much success.