The main difference is that with HQoS, policies are applied bottom-up in hierarchical order, rather than being applied independently at different levels.
Let's take a simplified two-level example with subscriber-level and VLAN-level, where there are multiple subscribers per VLAN, with data rate limits for each. Suppose all subscriber traffic exceeds the VLAN limit by 2%, but two of the subscribers exceed their subscriber limits by 10%.
If we apply the VLAN limit to all traffic without considering the per-customer limit, we'd drop 2% of all traffic on the VLAN. Yet if we had applied the per-subscriber limit first and only consider non-dropped traffic for the per-VLAN limit, we might end up being below the per-VLAN limit and not have to drop any other customer traffic at all. So, well-behaved subscribers could be punished for the behavior of the oversubscribers, which is not what we want.
With non-hierarchical QoS, you get no guarantees about the order, and in many implementations there would be no order at all: both levels would be applied independently and concurrently, so not only would you end up with lower throughput than the VLAN limit, but the two oversubscribing customers would get less than their traffic limit.
With HQoS, each oversubscribed customer gets 10% dropped, and every customer (including these two) get an equal percentage dropped as necessary to bring the rest of the traffic under the per-VLAN limit.
With an implementation that applies QoS at different levels concurrently, all customers would have 2% of traffic dropped. In addition, the oversubscribed customers would have 10% of their traffic dropped. Some packets would be marked for dropping by both limiters, so the total drops for these customers would be just under 12% (actually 10% + 2 % - (10% * 2%)).