var 文により作られるプロパティは DontDelete 属性を持ちます。
たとえば、グローバルコードで eval 関数を呼び出し、その eval コード内に var 文が含まれていたとき、その var 文により作られるプロパティはグローバルオブジェクトのものとなります。ですが、そのプロパティは DontDelete 属性を持ちません。
JavaScript の変数と delete 演算子: Days on the Moon
なるほどそうだったのか。知らなかったです。
ちなみにGreasemonkeyやFirebugでは、トップレベルであればvar 宣言した変数でもdeleteできちゃいます(関数内のvar宣言変数はdeleteできません)。
それは内部的にはeval(もしくはそれ相当の処理)がなされて動作しているからなんだと思われます。
GreasemonkeyとかFirebugのソースを読むときっと分かるんだと思います。そのうち読んでみます。