Seriously, for small hobbyist PCB numbers you don't want to waste your or other's time on quirky programming solutions.
I don't see why you should mess with any of the supply voltages (you should not have to). UG380 and in particular the HSWAPEN pin section elaborates on the configuration procedure. BUT:
Apart from serious doubts that you will get a LX9 guaranteed cheaper than a FT2232H in production numbers, it's a) a bad idea to save on a proper debugging interface, b) a better idea to do the math and cost optimization once you happen to go into numbers and when pricing matters. Simplest variant is just not populating the JTAG debugger part, which in worst case only requires a technician to appear with a programmer cable if someone happened to have bricked the board.
I think we are in full agreement on most of the above. As mentioned earlier in the thread, I will provide a USB programming interface for regular configuration updates by the user, and a proper JTAG interface for debugging and development (normally unpopulated header).
The SPI flash programming option is planned for initial programming in "production" and as a fallback for users, in case the USB-to-SPI bridge via the FPGA should run into problems. I hope it will never need to be used in the field, but if so, it is meant to be straightforward -- behaving just like the regular in-circuit programming interface for the SPI flash, i.e. usable with any cheap programmer like the TL866.
I was nervous about the surprisingly low LCSC pricing for the Spartan-6 initially, wondering whether this is just a limited batch of parts they happen to have on the shelf. But seeing that their pricing structure is consistent across the various packages and versions, it seems they indeed have a supply contract with favorable conditions in place.
And one more remark: I've had to work with a solution that did some pin muxing and PROG_B pulling in order to reprogram the SPI flash from an external controller, because someone intended to save costs on a flash. The software development for a reliable solution costed a lot more.
Could you elaborate where the problem was? As mentioned above, I expect this solution to be very simple from the user's perspective: Set a jumper to hold reset low, connect any old programmer in its regular SPI flash (in-circuit) programming setting, power my board either via its regular USB power input or via the programmer. No dedicated software involved, neither on the PC side nor on the PCB.