It's not standard for a commericial CA to insist on making your private keys. For reasons you mention.
Here's a link pointing to a collection of CA providers that suggests (and rightfully so) that the typical thing is for your browser to create the key pair and then send the Certificate signing request to the CA. In my experience with high end Verisign Certificates, that is true. I never tried the free/cheap solutions.
Keep in mind, even when the CA walks you through a browser based request, you may very well have the private key stored purely on the browser - CA companies spend a certain amoutnamount of effort on browser compatibility testing to make that possible. Don't assume that the server is generating the key just because you are using a browser. Unless it provides "key escrow" my experience has been that this is unlikely.
For the most part, my experience with CA companies has been that they REALLY don't want to take in errant form factors - if you want to send a homemade request for certificate siganture, you are likely to need to find a service that costs more... the reason is pure cost - there's usually a lot more hand holding involved in this approach as the ways to mess this up are numerous and a "generic" certificate request often has to be messed with to meet the security policy and settings required by the CA.
If you absolutely must generate certs with openSSLOpenSSL, I'd say look for server provisioning options that let you configure it to look like like an S/MIME certificate. Prepare to pay server cert costs.
If not, double check the process and verify that keys are generated on the browser.