Re-enumerating the PCIe bus/tree via echo 1 > /sys/bus/pci/rescan
is the correct solution. We are using it the same way as you described it.
We are using echo 1 > $pcidevice/remove
to disconnect the driver from the device and to detach the device from the tree. The driver (xillybus) is not unloaded, just disconnected.
A better solution is to rescan only the node where your FPGA is attached to. This reduces the over all impact for the system.
This technique is used in the RC3E FPGA cloud system.