There is also the possibility that nVidia has licensed some patents for their hardware/drivers and they don't actually have the right to disclose some of the code. If they got patent X from some company, which they incorporate into their binary driver, they couldn't open source their driver without removing that piece of code first. Now this wouldn't be a big deal if we are talking about a single function or a few lines of code, but if, for some reason, they have a lot of licensed code they would have to remove it all and we would be left with a very incomplete OSS project.
There is also the possibility that nVidia has licensed some patents for their hardware/drivers and they don't actually have the right to disclose some of the code. If they got patent X from some company, which they incorporate into their binary driver, they couldn't open source their driver without removing that piece of code first. Now this wouldn't be a big deal if we are talking about a single function or a few lines of code, but if, for some reason, they have a lot of licensed code they would have to remove it all and we would be left with a very incomplete OSS project.