+1 for #1 and #3 (I could swear #3 existed somehow, I'm surprised it doesn't). -1 for #2. Multi-port listening isn't necessary when you have wildcard socket events:
var %ports = 1234 1235 1236, %i = 1
while ($gettok(%ports,%i,32)) { socklisten name. $+ $v1 $v1 | inc %i }
on *:SOCKLISTEN:name.*: { }
This also lets you stop listening on certain ports without closing them all, which you can't do if you used one sockname.
There are reasons mIRC ties 1 port to 1 sockname. mIRC only handles 1 low-level TCP socket per sockname. Listening to any port requires an independent socket descriptor, even if everything is routed to the same place in the end. mIRC's socket data structures would need to be redesigned to poll an arbitrary number of sockets for each sockname at mIRC's scripting level-- I don't think Khaled would be willing to do this, since it's a hefty change away from the current design, and it can (read: will) lead to lots of new bugs until it's properly put through the paces. Properties like .bindport would also need to be completely redesigned, or new identifiers would need to be introduced. And since you can already do multi-port listening, there's no functionality gain, just a lot of painful design changes.
Sidenote for #3: mIRC should use the existing .addr and .port (or .saddr and .sport) properties, not create new ones.