var %t = 5
var %q = % $+ t
; OR var %q = $+(%,t)
echo -s t= %t ; q= %q ; *%q= [ [ %q ] ] or $eval(%q,2) or $(%q,2)
If you want another level of indirection:
var %s = % $+ q
echo -s s= %s ; *%s= [ [ %s ] ] or $eval(%q,2) ; **%s = [ [ [ %s ] ] ] or $eval(%q,3)
Mind that /set keeps the %var from evaluating, since otherwise you can never set a var:
/set %t 5 -> %t is NOT evaluated, or it would be /set 5 which has no meaning

So, /set [ [ %q ] ] 1 is the same as /set %t 1, and /set $(%q) 1 too.
Just experiment with it, mind that you need // before all stuff when you test it in a channel or status window (only then, in scripts everything is presumed to be a command and start with //)
/set %h blah
/set %t %h -> t has the value %h (percent h)
//set %t %h -> t has the value blah
In a script set %t %h, /set %t %h and //set %t %h all give %t the value blah.