Well... I figured 1 out that uses only 1 timer and does not annoy. Not that your way is bad, just inaccurate as You have to have somebody do an active event for this to check idle. Here's mine, it's kinda crude way of doing this but accurate. Please post if you have any other suggestions:
Alias idleaway {
  if (%awaystatus == back) && ($idle >= 900) {
    set %awayreason 15 Minutes of Idle
    set %awaynick RelinIdle
    ame 3,1i15s 3a15way 14[ 15 $+ %awayreason 14] [ 15 $+ $asctime(h:nn:sstt) 14] [ 3$15quishy3$15cript 14]
    set -s %awaytime 0
    inc -c %awaytime 1
    away %awayreason
    nick %awaynick
    set %awaystatus away
  Elseif (%awaystatus == back) && ($idle < 900) { timer 1 $calc(900 - $idle) idleaway }

And I put /idleaway in the Perform mIRC Options. This SHOULD be accurate. I'm still curious of how to do it accurately AND not use timers... I'll use this script for now.

- Relinsquish