Потому что, когда вы вносите изменения в экземпляр объекта, вы не меняете его прототип (класс) (читайте об объектной модели js).Если вы хотите изменить поведение родительского объекта, введите:
w.prototype.onmessage = function() {/* ...your code... */};
Модель объектов JS позволяет перезаписать метод каждого объекта, чтобы изменить его поведение, но при этом защитить прототип от этого изменения.Привыкайте.
Когда вы загружаете модуль, он работает в изолированной области, поэтому вы не можете получить доступ к функциям sys без непосредственного изменения требуемого объекта.Это поможет вам понять модель модуля nodejs, попробуйте запустить ее:
require.js
module.exports = {};
main.js
var x = require('./require.js');
x.tell = true;
var y = require('./require.js');
y.tell = false;
console.log(require('./require.js'));