Your shaping difference per node can not be that different.
1. makes several aliases..
shape256256 = ip or net
shape512256 = ip or net
shape512512 = ip or net
2. makes several queues for said aliases..
256-256queue-up
256-256queue-down
512-256queue-up
512-256queue-down
512-512queue-up
512-512queue-down
3. make and prioritize your shaping rules for shaped nodes/networks (put them at the top of all other shaping rules). This leaves the node/client in charge of port/service queuing (when they saturate their allocated bandwidth it's their problem.)
4. assign static forwarded ports to each client (uPNP is a disaster IMHO) with the alias system as well. (You'll have to make the NAT rules too)
ie:
forward1 = 34750-34755
forward2 = 34756-34761
I don't think there is any need to put another box in the middle of things, but then again every network is just a little different - so your mileage may vary.
just an idea, maybe it helps. This probably won't work if your looking to "Dedicate" bandwidth per node.