example:
x = "Hello";
delete x; // returns true, x is removed
var y = "Hello";
delete y; // returns false, y is not removed
I'm not interested in How this happens, I want to know why the language has this feature.
Strictly speaking the first x is not a variable but a property of the global object. In browsers it's usually window (so x = "Hello" is equal to window.x = "Hello"). You can't use delete to remove variables but you can use it to remove object properties, and that's what it does in the first case.
delete removes a property from an object. The var keyword attaches your variable to the current local context, while declaring without var implicitly attaches the variable to a global object, i.e window. However, when var attaches to window (root context), delete still won't work.This page has a lengthy explanation that spells out the why.
The short answer is delete is for properties, not variables. var y creates a variable. x = "something" creates a property of the global scope.
Also note that not all browsers handle delete the same. cough cough IE