This is easily scriptable, as I'm quite sure you realize.
Example:
Code:
 on me:*:join:#:{
$+(.timer,idle,.,$cid,.,$chan) 0 310 idle_check $cid $chan
}
on me:*:part:#:{
$+(.timer,idle,.,$cid,.,$chan) off
}
on me:*:kick:#:{
$+(.timer,idle,.,$cid,.,$chan) off
}
on me:*:quit:{
var %a = 1, %b = $chan(0)
while %a <= %b {
$+(.timer,idle,.,$cid,.,$chan(%a)) off
inc %a
}
}
alias idle_check {
.scon $1
if $nick($2,$me,o).idle > 600 {
.mode $2 -o $me
}
}

Starts a timer when you join the channel, which is connection and channel specific. Timer is set for 310 seconds (5 minutes 10 seconds). At 310 second, your idle time is checked, and if your idle time is 600 seconds (or more) and you are opped in that channel, then you automatically deop.

On a sidenote, I can see where an ON IDLE event could be handy for channel control, where you don't want people idling for long periods of time (example a help channel for people that aren't helpers).

I can also see where the ON IDLE event, as you suggest, would make a script like the one I just wrote a lot shorter.