Code:
on *:TEXT:voice me:?: {
  if ( $nick !isvoice #channel ) && ( $timer(.vmt. [ $+ [ $nick ] ]) == $null ) {
    inc -z %vmt.delay 5
    .timer.vmt. [ $+ [ $nick ] ] 1 %vmt.delay mode #channel +v $nick 
  }
}

The event checks if $nick is not voiced already and has no timer already in progress, and then increments a delay counter by 5 and sets a timer to voice that $nick with a delay using the value in the delay counter (%vmt.delay).
The trick used here is the "-z" option (first time i found a good use for it), this decreases the value of delay counter by 1 every second, so its counting down also. would look like this
12:00:00 john asks for voice, delay = 0 + 5 , john to be voiced in 5 seconds
12:00:03 peter asks for voice, delay = 2 + 5, peter to be voiced in 7 seconds
12:00:05 john voiced
12:00:10 peter voiced