First, let's get some terminology straight. In order to call something a one-time-pad, the key must be truly random. So with that in mind:
You almost asked two separate questions:
I am using CryptGenRandom() to generate my key. Is this good enough or should I consider using a TRNG?
If I use a TRNG, what practical problems, if any, are there in deploying OTP with TRNG?
For Question 1, as I understand it, the only way anyone has ever successfully cracked (i.e. re-generated the proper seed) for CryptGenRandom() is by gaining access to the original machine where the key was created. And that was using a flaw in Windows 2000 which is 15 year old technology. So, based on that (combined with smart people at MS claiming it's cryptographically secure), I would argue that yes, CryptGenRandom() should be practically good enough to be used for key generation.
That being said, some high bit encryption should be good enough too, and if someone is thinking about using OTP instead of some other method of encryption, they are likely paranoid to the point that good enough isn't going to cut it. In other words, if you're going to implement something that you can truly call OTP, it must be absolutely impossible to crack your implementation without the key, which you cannot accomplish unless you use a TRNG.
As for Question 2, IMHO, there are no practical problems with using a TRNG. The reason is that only 1 trusted party involved in the communication needs to have the TRNG, not everyone. The harder problem is with key distribution, not key generation. The party with the TRNG (USB dongle or some other contraption) could generate a large set of random data, and then distribute the data to all involved parties. Each party when sending a communication would then simply need to specify the offset into the random data where their key begins. When the random data set is used up, a new data set can be generated.
However, the fact that someone involved in each communication has to initially obtain a hardware device in order to create the key may be considered a "problem", depending on how you look at it. This could have an effect on your "sales pitch", so to speak, since you won't appeal to impulse users who want to send a message with unbreakable encryption right now; all new users will have to wait some amount of time to obtain the TRNG device. You could consider using a service such as www.random.org, but if you do that, your ultra-paranoid users may not like the fact that the key is being downloaded over measly SSL!
TLDR; Regardless of whether you use CryptGenRandom() or a TRNG, the hard part is not actually in key generation, but in distributing the keys to each party so they can decrypt the message.