You're correct, yes; $2- is indeed anything after $1

The issue is simply the way your condition is constructed.
Code:
if ($2- && $nick == %ADMIN. [ $+ [ $chan ] ] || $nick == %SUPERADMIN) { goto a }
checks whether: both $2- is not $null/$false/0 and $nick == %ADMIN. [ $+ [ $chan ] ]; OR $nick == %SUPERADMIN, regardless of whether $2- is specified or not. Because of this, that condition will always be met if the person triggering the script is %SUPERADMIN.

Maybe it'll help if I list the possible ways that condition can be met:

  • if $2- is not $null/$false/0 and $nick == %ADMIN. [ $+ [ $chan ] ]
  • if $2- is not $null/$false/0 but $nick != %ADMIN. [ $+ [ $chan ] ]... but $nick DOES == %SUPERADMIN
  • if $2- is $null/$false/0, but $nick == %SUPERADMIN

In short: "if A and B... or if C", rather than "if A... and if B or C".

By using parentheses to group parts of the condition like I described earlier, the interpretation changes to:

  • if $2- is not $null/$false/0, AND $nick == either %ADMIN. [ $+ [ $chan ] ] or %SUPERADMIN