disconnecting a usb device should result (eventually) in a suitable status on the relevant hub, and thus shouldn't require a timeout to get an error back to the user.
devices that don't respond because they are in a bad state can be unplugged (if removeable). built-in devices on built-in hubs that get into a bad state probably need a usb or system reset, but some higher-level application (or human) timeout can interrupt a too-long delayed request. so far, i'd argue that a per-request timeout wasn't needed.