I had this same thing happen a while back. You know what it was? A bad USB device!
I had a little USB debug probe that went bad (somehow) and it totally screwed up my USB hub's ability to... Stay stable? Haha, that's the best way to put it.
Anyway, the fix was to remove the device and disconnect the USB hub (and its power) for a few seconds. If I ever reconnected the probe, the problem would recur within an hour or two.
Here's how you can check for something similar: Run dmesg and look for regular messages like, "unable to enumerate device". It'll tell you which bus and port it's on but that's not easy to figure out so just keep unplugging things until you get the one matching the device that's regularly throwing errors in dmesg. Keep it disconnected, power everything off (PC, USB hub's, etc) for a few seconds and then try running without that device for a while. It might be the culprit!