One reason why a device doesn't enumerate every time is timing issues with the control requests.
Assuming USB 2.0, the control endpoint MUST return ACK in the Setup stage, and must return data, ACK, NAK, or NYET as appropriate in the Data and Status stages that follow (or STALL for unsupported request).
A hardware-based protocol analyzer will show any errors. If you don't have a protocol analyzer, use whatever debugging tools you have to try to determine if the control endpoint is responding to every received token packet.
The same is true for IN and OUT endpoints.
When this is the case, the fault is not with the host or hub, but with device firmware that is not complying with the spec.