Using NURBS? It's a can of worms. Not even physics APIs support NURBS (Bullet doesn't for sure).

Most particle systems I've seen were tuned to simulate fuzzy phenomena such as smoke. Neither of the two examples above seem to fit. They're nice examples sure but I wonder if it's worth designing a PS so high-level it allows to do that.

There was a presentation for a Command & Conquer game floating around on PS, in which they discussed how they designed the system. Unfortunately, I cannot find the matching keywords right now. I hope somebody remembers this presentation as well and provides a link to it!

Bullet does not support Nurbs because they either don't have a solution to the problem, or they don't have an efficient way of doing it. Next gen rendering engines

would probably have support for Bezier and Nurbs patches via the tessellation shaders, there are examples available for both D3D and OpenGL. So Spline cages will be the way a lot of geometry can be rendered.

Particles are extremely easy to compute in computational terms because they require a low amount of processing per point and many particles can be simulated simultaneously using shaders.

The term "can of worms" is hardly correct.

The fact is, a solution was available in one of the Graphics Gems books for finding the nearest point on a Bezier curve - the solution is arrived by taking a numerical differential equation solver and applying it to a rearranged form of the Bezier generator function (quintic or order 5). Now the Bezier surface can be defined (via lookup) as the product of the generator functions of 2 curves (only 2 curves). I don't know what the equation to solve would look like.

Now supposing you have tons of parametrically defined objects, in a database where curves are curves, and flat edges are flat edges. A renderer would ideally be able to display this on GPU. In addition, if you could cut any curve by another curve or point set, then you could probably have a form of curvy BSP, and that concept is very interesting. but before you can make cuts, you need to determine the point set.

And for rendering particles, if they collide with a Bezier surface, or any parametric surface, it would be good to see a change in physics or colour. (obviously)

There is some information here http://www.flipcode.com/forums/thread/7269 using the http://en.wikipedia.org/wiki/De_Casteljau's_algorithm you could have a stack and a while loop instead of recursion to find out if you got a collision.