setTimeoutの戻り値を自関数の中で管理するだけで済むように見えるんだが、こういう挙動が欲しいのではないのか?

document.getElementById('mybutton').addEventListener( 'click', function f(){
  var delay = 3000;
  if( ( 'timeoutId' in f ) === false )
    f.timeoutId = false;
  if( f.timeoutId !== false )
    clearTimeout(f.timeoutId);
  f.timeoutId = setTimeout( function(){
    f.timeoutId = false;

    /* my oparation */

  }, delay );
}, false );

目印は別にfalseでなくてもいいが