No, you absolutely do NOT need ALTQ to re-route traffic to and from your freebsd jails. I use pf to map traffic on external IPs to the static IPs that my jails run on. The following entries direct traffic to and from the internet to the jails for my mail server:
lo_toaster = "127.0.0.6"
toaster = "18.104.22.168"
nat on $ext_if from $lo_toaster to any -> $toaster
rdr on $ext_if from any to $toaster -> $lo_toaster
I have dozens of jails set up like this. While it is obviously more complicated than just assigning public IPs to the jails, it comes with some nice perks. I can change/add/delete public IP(s) for a jail and nothing within the jail needs to be touched. Edit /etc/pf.conf and I'm done. I can move jails between hosts without touching anything within the jails. Because they run on loopback addresses, I can bring the jail up on multiple servers simultaneously, test, and then move traffic by updating the network and firewall rules.
A long time ago, I used ALTQ to make connections to port 25 from Windows hosts really, really slow ( pass in quick proto tcp from any os "Windows" ... ) but the advantages of doing so aren't worth having to rebuild the kernel manually.