Меня больше удивляет, почему undefined, а не TypeError. У $ нет свойства scene. $ - это функция, а не объект. Вот если бы было:
function $() {
this.system = 3;
this.scene = function(){}.bind(this);
};
var lol = new $;
alert(lol.scene.system);//undefined
Тогда все было бы понятно, ибо scene, вне зависимости от контекста, остается функцией и не имеет свойств. И даже если использовать new lol.scene, результатом будет пустой объект, ибо оператор new создает новый экземпляр объекта со своим (новым) контекстом, который не имеет свойства system. Как то так