расширять DOM
опаснее
пространство имен можно создать так
var MyNamespace = {
func1: function(){...}
...
};
можно создать область видимости, к содержимому которой нельзя будет получить доступ извне и которая влияет на глобальную область видимости ровно настолько насколько это необходимо
(function(){
var privateVariable = ...;
window.MyNamespace = {}; // или this.MyNamespace = {}; или MyNamespace = {};
window.MyNamespace.func1 = ...;
})();
а вообще, первый вопрос слишком нечеткий. Посмотри, как другие фреймворки сделаны или спроси что-нибудь по-конкретнее