There's sort of a solution, but it's not pretty.
The main issue is that Word registers itself in the ROT (Running object table), and other applications can then easily get access to the instance of Word registered in the ROT (that's what the VB GETOBJECT function does for instance).
So, in your app, you'd basically have to do 2 things
1) Try to GETOBJECT (ie query the ROT for a running instance)
2) If you get one, you know you HAVE to create a new instance of Word to use (CREATEOBJECT in VB, the process is different in other langs).
3) If you DON'T get one, you have to create 2 new instances of Word. The first will automatically register itself in the ROT, the second won't. Use the second instance, and quite the first instance.
Even though you terminate that first instance, It won't "retroactively" register itself in the ROT, and other applications will generally not object a reference to it to use, they'll automatically create a new instance, which, since no other instance is registered in the ROT anymore, will then get registered.
That said, it is still possible for other apps to get at your instance of Word, so this technique isn't bulletproof. How? Because Word ALSO registers each loaded DOCUMENT in the ROT. But that's a pretty seldom used feature.