I've tried to do this in the past and came up with some issues.
We know this is possible with hard disk drives and it works as long as you keep a certain order when installing the OSes. Old Windows -> Newer Windows -> Linux. Old Windows treats the hard disk drive as it likes. Newer Windows identifies Old Windows (because its newer) and it takes actions as to not destroy it. Finally, Linux installs a custom boot loader (e.g. grub2) that identifies all Windows and Linux partitions and creates a menu that chainloads to the individual boot loaders.
Now, why does this not work with USB storage? Well, because all these installations are tied to the specific hardware of the PC. Windows contain the specific drivers and configurations, Linux is a little bit more versatile. This means that, even if you manage to create such a setup, it will be useless in a different PC than the one you installed it to.
This is the reason why there are the so called "live" installation images. So, you would like to install in a generic way, with a lot of drivers for all possible hardware configurations, which would load at boot time depending on the machine hardware you're trying to use.
Now, linux goes live very easily, almost all distributions support it. On the other hand, the only windows live version I know of is the Windows To Go, only for Windows 8. Even that has many limitations in theory, I have not tested it.
If UEFI becomes a problem for whatever reason, you can always try to boot the PC in legacy BIOS mode, if supported. Some linux tools support installing the boot loader with both UEFI and legacy support, such as livecd-iso-to-disk from Fedora Linux. Such tools support using a FAT32 formatted usb disk that contains a read-only .iso image and a couple of diff files for subsequent changes in storage; as a result, you can boot into multiple linux images without partitioning the flash disk, which is very convenient, since you can use it "live" or as storage, or both! Installing newer versions for boot loaders also supports NTFS formatted USB disks.
I haven't come up with a solution for the "live" Windows problem. Also, this process is quite tedious for users who are not familiar with low level linux operations such as configuring boot loaders for multiple installations.
This is a really good question and I'm also interested in anything that can even partially solve the problem.