True, there are some functional limitations. My comment was more about looks and readability (assuming sufficient functionality) and is not to be taken as an argument against switch/case support (I've never wished for it, let alone needed it, but I have nothing against it either).

An idea (and just that) regarding the first limitation could be this:
alias moo { 
  var %moo = $1 
  goto %moo {
    echo -a moo cow 
    goto break 
    echo -a moo dog 
    goto break
    echo -a moo cat 
    goto break
    echo -a moo mouse 
  } | :break

Granted, this uglifies the code a little bit, and the same "goto break" command can't be used in more than one blocks etc, but it's not inefficient in any (significant) way.

The inability to have labels with spaces or identifiers is more serious imo though (and perhaps the only use I'd have for switch in my scripts).

/.timerQ 1 0 echo /.timerQ 1 0 $timer(Q).com