You may not nest subemenus, but you could use the same submenu definition for different tasks - in this example, the command is passed to the alias as 2nd parameter:
Code:
menu status {
  Favorite rooms $+([,$numtok(%rooms,44),])
  .$iif(($status == connected),join)
  ..$submenu($popupmenu($1,join))
  .$iif(($status == connected),part)
  ..$submenu($popupmenu($1,part))
  .-
  .delete 
  ..$submenu($popupmenu($1,deleteroom))
}

alias -l popupmenu {
  if (($1 isnum) && ($gettok(%rooms,$1,44))) { return $v1 : $2 $v1 }
}

alias -l deleteroom { set %rooms $remtok(%rooms,$1,0,44) }

That's handy with simple commands.
If you just want to use e.g. different $styles, little to no advantage over separate submenu definitions remains (length of code etc):
Code:
alias -l popupmenu {
  if (($1 isnum) && ($gettok(%rooms,$1,44))) {
    var %room = $v1
    if ($2 == join) { return $iif(($me ison %room),$style(3)) %room : $2 %room }
    elseif ($2 == part) { return $iif(($me !ison %room),$style(2)) %room : $2 %room }
    else { return %room : $2 %room }
  }
}