I've find a way to do this using Hotspot user profiles, address lists, firewall mangle rules and pcq queues.
Downsides are that you have to create a new hotspot user profile, mangle rules and queues for each account, and you end up with loads of mangle rules, which uses more CPU.
I create the following rules on my Hotspot:
This creates a hotspot user profile called user1 that allows a maximum of 3 logins and adds each user's IP address to the firewall's address list. NB: When you create your user in User Manager, you must make the group = user1.
/ip hotspot user profile
add address-list=user1 address-pool=capped advertise=no idle-timeout=1h \
keepalive-timeout=5m name=user1 open-status-page=always shared-users=\
3 status-autorefresh=2m transparent-proxy=yes
This marks the upload and download packets for each user in the user1 address-list, so we can rate-limit them with PCQ queues.
/ip firewall mangle
add action=mark-packet chain=prerouting comment="Mark user1 Packets" \
disabled=no new-packet-mark=user1-up passthrough=no src-address-list=\
user1
add action=mark-packet chain=prerouting comment="" disabled=no \
dst-address-list=user1 new-packet-mark=user1-down passthrough=no
The code for the PCQ Queue types
/queue type
add kind=pcq name=capped_download pcq-classifier=dst-address pcq-limit=50 \
pcq-rate=1024000 pcq-total-limit=2000
add kind=pcq name=capped_upload pcq-classifier=src-address pcq-limit=50 \
pcq-rate=192000 pcq-total-limit=300
This code creates the PCQ queues. The first two lines create a DOWNLOAD and UPLOAD group. In my setup, capped users connect to the Internet via a different line from my uncapped users, so in the third and fourth lines I create a capped upload and capped download group with a maximum download and upload rate for all the users therein. The last two lines create an upload and download queue for the user inside the capped upload and download group (see picture)
/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=PCQ_DOWNLOADS parent=global-in priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=0 name=PCQ_UPLOADS parent=global-in priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=384k name=CAPPED_uploads parent=PCQ_UPLOADS priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=3584k name=CAPPED_downloads parent=PCQ_DOWNLOADS priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=1024k name=user1-out packet-mark=user1-down parent=\
CAPPED_downloads priority=8 queue=capped_download
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
max-limit=192k name=user1-in packet-mark=user1-up parent=CAPPED_uploads \
priority=8 queue=capped_upload
More info:
QoS and traffic priorities, by Janis Megis, MikroTik