For simple particle paths without inter-particle interaction, an OpenGL or DirectX vertex shader is a good way to go. Can be applied to point sprites. For more complex interactions, maybe investigate geometry shaders.
CUDA may be able to render the particle coordinates to a texture (but the CUDA texture interop calls aren’t always very high performance). But then you could access this data from a vertex shader for rendering.
DirectX and OpenGL would both work for what you intend. XNA has the drawback of requiring managed code and you need a managed interface to CUDA.
If you want your tutorial/particle system to be more generic, OpenGL. Otherwise XNA and DirectX will tie you to Windows, obviously. I am always a fan of getting a wide spread on things, so IMHO go with OpenGL.