The reurn will be triggered so your unset will not be used.

You have a check here
if ( %skill [ $+ [ $nick ] ] > 0 ) {

That will only trigger if the %skill<nick> have a level higher then 0, so all you need to do is to remove all your returns.
Code:
on *:text:*:#: {
  if ( %skill [ $+ [ $nick ] ] > 0 ) {
       ; Check the value and will go on if more then 0.

    if ($istok(%am,$1,32)) { msg $chan Anti Mage }
    elseif ($istok(%qop,$1,32)) { msg $chan Queen of Pain }
    elseif ($istok(%ss,$1,32)) { msg $chan Shadow Shaman }
    elseif ($istok(%lion,$1,32)) { msg $chan Lion }
    elseif ($istok(%dp,$1,32)) { msg $chan Death Prophet }
    elseif ($istok(%drow,$1,32)) { msg $chan Drow Ranger }
  }
}

You already removing "%skill" with this code

set -u30 %skill [ $+ [ $nick ] ] 1

The code give you 30 seconds to use the variable, and it should be more then enough. I didnt test it.