Всем спасибо, тему можно закрывать. Демо-код получился такой: 
(function(){
  if(this == window){
    document.userScope = arguments.callee;
  } else {
    with(this.stack){ // Область видимости для вражеского фронта
      eval('(function(){' + this.code + '}).call(this.module);');
    }
    this.stack[this.name] = this.module;
  }
})();
(function(){ // Мой фронт
  var userScope = document.userScope;
  delete document.userScope;
  var stack = {};
  var module1 = {};
  var module2 = {};
  userScope.call({ // Добавляем первую переменную
    name: 'module1',
    code: 'this.fn = function(){console.log(module2)};', // Вражеский фронт
    module: module1,
    stack: stack
  });
  userScope.call({
    name: 'module2',
    code: 'console.log(this)',
    module: module2,
    stack: stack
  });
  module1.fn(); // После добавления новых переменных, старые их тоже видят.
})();
Ничего лишнего не попало во вражескую область видимости.  
	 |