I think you are might be right. I consulted my McDowell and Sayer book "USB Explained".
However, I think such an EFFECT could be CAUSED by a well written program? Maybe? (I am a VERY newbie programmer!).
Buying 10 USB voltammeters @ 1.87 a piece, could "size up" my raspberry pi bramble bush, in a hardware way. But it seems kind of silly.
A software way might be to use something called "power-switching". Some hubs support it (I don't know if this includes "root USB hubs"; the host controller.). McDowell and Sayer only had one paragraph on the subject? Perhaps its not popular? Perhaps its an old part of the standard. I could dig through the USB official documentation. I have it on pdf somewhere, but I could just find it online again.
According to McDowell an Sayer, downstream hubs have one of five states: (1) Powered off, (2) Disconnected, (3) Disabled, (2) Enabled, or (5) Suspended.
Devices have six possible states: (1)Attached, (2) Powered, (3) Suspended, (4) Default, (5) Address (6) Configured.
Hubs plugged into other hubs, are configured as devices.
Maybe a shell script could use cat and grep could glean from lsusb and dmesg and other common linux utilities (maybe "port" identification; Linux-port, not USB-port numbers. netstat, lsof, ss, and/or nmap.) what devices are present.
And maybe, by this "word" identification (mouse, keyboard, etc), and the possible states for devices and/or hubs, one could send a series of simple "enable" or "disable" queries, until the state becomes known? And some "power-switching" commands could be floated to the hubs to try them, on and off?
The only problem with this, I think, is turning somethings off might make it so they can't be turned on again, by CPU signal ove rthe bus? Is this right?
And Disconnecting a hub might make it unable to reconnect... or "enable"? Maybe?
So maybe, after this proposed software runs its course, the user should be prompted to reboot the computer, so that USB devices will all power on again?
I thought I understood this well enough to give a meticulous description of what to write; but unfortunately, looking at it, it is more than I can handle. I will leave it here as a "half thought", "half program".
With bus enumeration taking place every time a USB device is plugged or unplugged, you'd think there'd be an easier query for most of this information? There probably is, I just don't know it. Maybe that info is in proprietary drivers, in Windows and Apple, and that info in Linux, is just to "complex" for a Noob?