追記

コメントで id:Jxck さんに教えていただいたように、emitter.onはリスナー配列に登録するだけなので、登録されていなければ、実行されません。
emitter.onのところ全然読んでなかった…恥ずかしいなぁ。
そして、前にJavaScriptのイベントリスナーをちょっと調べた時に同様のことを思った記憶がある…
なので、↓は全部勘違い。
ドキュメントを見ると

EventEmitter のインスタンスがエラーに遭遇した時、 典型的な動作は 'error' イベントを生成することです。 node ではエラーイベントは特別に扱われます. もしそのリスナーがなければ、デフォルトの動作はスタックトレースを出力してプログラムを終了することです。

となっています。エラーを定義しないといけないんですね。ちょっと修正しましょう。

for(var i = 2; i < len ; i++){
  var ev = download(argv[i], i-2); 
  // イベントハンドラ登録(エラーが出るはず)
  ev.on('hoge', function(index, res, buf){
    downloadSite.add(index, res, buf);
    if(downloadSite.isFinish()){
      downloadSite.showAll();
    }
  });
  ev.on('error', function(e){
    console.log(e);
  });
}

実行しても何も起きませんでした。該当イベントがなかったらerrorイベントへ勝手に飛ばしてくれるわけではないみたいです。
と言うことは、try-catch内で手動でerrorイベントを呼ばないといけないのかな?と思ったのですが、これも違っていて、catchに入りませんでした。(正常終了しているということです)
動きを確認するときは小さなコードで確認しよう。

var EventEmitter = require('events').EventEmitter;
var ev = new EventEmitter();
ev.on('fuga', function(){
  console.log('call fuga function');
  return false;
});
var hogeResult = ev.emit('hoge', 1);
console.log('result hoge %s', hogeResult);
var fugaResult = ev.emit('fuga', 1);
console.log('result fuga %s', fugaResult);

これを実行すると

$ node hoge.js 
result hoge false
call fuga function
result fuga true

ということは、定義されていないイベントを呼び出したときはemitの戻り値がfalseになります。
この戻り値を判断して、falseであればエラーイベントを発火させればOKということなのか…?
個人的には任意に起こすエラーじゃないから、例外をthrowしたほうが素直だと思うんだけどなぁ