Когда вы передаете переменную o в своем примере, вы передаете неопределенное значение, а не ссылку на что-либо. Что вам нужно сделать, это отправить объекты родительского объекта. В этом случае объект окна (при условии, что вы используете браузер).
(function (p, name) {
p[name] = function() {
alert('test');
};
})(window, "o");
o();
Это передает объект окна и имя вашей новой функции. Затем он назначает вашу функцию окну, и теперь она доступна для вызова. Если вы не собираетесь использовать замыкания, я бы предложил просто назначить функцию напрямую.
function o() {
alert('test');
};
o();