The problem resides in how these eusb-jtag cable present themselves to the usb host. If you look with a magnifier you see they present twice. The first time as generic usb device looking for firmware, then a specific binary file is sent (through usb-bulk), the cable uploads it, resets, reboots, and presents itself again the usb host as jtag cable.
It means, from the HOST-OS point of view, it sees endpoints changed after the reset, also the vendor and the device id change, and, since changes happen without an un-plug (which invokes device.driver.done) plug-in (which invokes device.driver.init) event, this makes virtualizers like VirtualBox to go nuts as they can't understand what happens on their upper end-point, which is not directly connected to the hardware, it's passed trough a glue melt software layer from the host OS.
A smarter virtualizer like Xen, or Wmware, comes with a smarter glue able to simulate both the un-plug/plug-in events as virtual events, therefore the virtualizer is now able to handle the reloaded device.
Another option is ... to buy/build an ethernet-jtag.
Here I built mine using an embedded linux-box (Arietta G25 by Acme System), but it's not compatible with Xilinx-Impact, it doesn't understands the bitstream, it simply uploads it through the lan into the target (Xilinx Spartan S3, S6).