I think your problem is that you're trying to open VIs with the same name. LV can only hold one VI of a given name in memory at one time, so if you want the VIs to be completely different, you will need to rename all of them.
Another option would be to make all of them reentrant. This will mean that each place you call the VI will hold a seperate copy of the VI. You should make sure this doesn't affect the way your code works (for example, if you have a functional global, it will be affected by this).
I think the easiest way would be to make an EXE and then copy it and rename it. I believe that when running in the run time engine, you get seperate execution for each EXE, but I'm not at all sure of this, so you should check it.
If this isn't so, you can try merging the first two options.
___________________
Try to take over the world!