in some ways it's worse than you think, the order devices are detected in when they are all plugged in at power up is partially determined by how fast each driver is initialized, a major speed change in a driver could change the order.
the thing you need to remember about USB is that is was initially designed for cheap, low-end, low speed devices like keyboards. Electrically it is a _very_ simple design.
you have four wires
the signaling over the data and clock wires is also pretty primitive (it's basically the i2c bus with a little more definition over the data standard)
all that a non-powered USB hub consists of is multiple sockets wired together (NO active electronics at all)
a powered hub is only required to add a power supply to this.
(now frequently hubs do add a bit more logic so that they can respond to queries from devices to answer how much power they can provide, but that's not a requirement of the USB 1.0 spec)
as for the funny connector, it was designed primarily to be cheap, then to be durable. it was copied from one of the popular console game systems that used it for the joysticks. They then made the ends of the cable different to make it impossible to plug things in incorrectly (and then people didn't like the size of the connector, so they made a different one, and a different one,.....)
over time things have gotten faster (by a factor of 100 or so), but everything is still backwards compatible so that you can take the oldest USB device and plug it into the newest system and things will work (everything on the bus will slow down to the speed of the slowest device on the bus, but it will function). USB was designed to be _extremely_ forgiving for slow or extremely low capability devices
device identification on USB is supposed by be done by a unique identifier in each device, but as USB interfaces have gotten cheaper (and moved from needing several chips, including separate rom/ram chips to being a tiny section of built-in logic 'thrown in' on a $5 chip in addition to the main functionality) the process and capability to give each device a unique serial number has fallen by the wayside (and/or cheap, short-sighted manufacturers have opted to shave pennies off their costs by not bothering to program the serial numbers on the devices) and the result is that sometimes there is no theoretical way to tell two devices apart once you are talking to them (you have to depend on what bus are they plugged into, which falls apart with hubs, at which point the only thing you can do is to depend on what order they were plugged in)
USB today is doing things never imagined by the designers, and in fact doing things that if you had asked the designers, they would have told you were explicitly _not_ in the world of things they designed USB for (due to the cost of implementing the interface with the technology of the time). For a lot of things that USB is being used for today, their answer would have been "use FireWire, it's designed for that sort of performance"