One way you could do this is put your code into an alias which the timer calls, instead of putting the command into the timer. Instead of set -u60 %variable, you can use "set -z %variable 60", which lets you see that if the variable is set, you can know how many seconds until it reaches zero, which you can use as the delay for your timer.
Your alias should use a 2nd variable that contains a space delimited list of the nicks in the queue to get the message. If %listofnicks has a value, then you msg $gettok(%listofnicks,1,32), and then you "set %listofnicks $gettok(%listofnicks,2-,32). Of course your alias should make sure the nick is still in channel by the time of the delayed message. If they're not there, then you can skip them without waiting another 60 seconds. Or possible trap the PART and QUIT events to remove them from the queue.
Your script also needs to trap the NICK event so that if someone changes nick while waiting to receive the delayed message, it should rename their nick in the %listofnicks queue.
Your OPEN event isn't working for anyone who causes the query window to open while %delay has a value. Also, your OPEN event doesn't close the window when anyone queries you, so you'll never respond to the query again until you close the window.