Even if arrays are added I doubt they'll be any easier to pass between aliases than hash tables, ie. you'll still need to pass the name of the array and then the called alias will need to know that it's an array name and use $array($1, <index>) or whatever. I don't see any reasonable way around that. The only benefit of arrays would be the possible efficiency gained in certain operations (eg. iterating over them). For your purposes right now you could still use a hash table or global variables, all you'd need to do is some name-checking to make sure the temporary variables/hashtable don't already exist, then return the temporary name(s).

Code:
on *:text:*:*: {
  var %vars = $getinfo($nick)
  var %local = $tempget($gettok(%vars,1,32)), %response = $tempget($gettok(%vars,2,32))
  if ($1 == %local) {
    .msg $iif($chan,$chan,$nick) %response
  }
}
alias -l getinfo {
  var %varname1 = $tempvar(get1), %varname2 = $tempvar(get2)
  if ($hget(info,$1)) {
    tempset %varname1 $gettok($v1,1,32)
    tempset %varname2 $gettok($v1,2-,32)
  }
  return %varname1 %varname2
}

alias tempvar {
  var %tmp = $+(%,temp.,$md5($rand(1,10000) $ticks $1))
  while ($var( [ %tmp ] ,1)) %tmp = $+(%,temp.,$md5($rand(1,10000) $ticks $1))
  return %tmp
}
alias tempset set -u0 $1-
alias tempget return $eval($iif($left($1,1) == %,$1,$+(%,$1)),2)


Not exactly pretty but it works and it definitely won't affect other global variables.

It just uses three extra aliases, $tempvar to create a new alias name, /tempset to set the temp variable's value from it's local variable name, and $tempget to get the variable's value.

As you can probably see /tempset and $tempget are just vanity functions to clean-up the code a tiny bit.