Как реализовать многоуровневый вложенный запуск функций?
Для этого, перед вызовом функции fun() в makeGroup значение root надо временно подменить на только что созданную группу. Вот новый код для makeGroup:
var makeGroup = function(name,fun) {
    var newgroup = new group();
    newgroup.name=name;
    newgroup.status='ok';
    newgroup.stack=[];
    
    var oldRoot = root;
    root = newgroup;
    
    try {
        fun();
    }
    catch(e) {
        newgroup.status=e;
    }
    
    root = oldRoot;
    
    root.stack.push(newgroup);
}

Для этого, перед вызовом функции fun() в makeGroup значение root надо временно подменить на только что созданную группу. Вот новый код для makeGroup:
var makeGroup = function(name,fun) {
    var newgroup = new group();
    newgroup.name=name;
    newgroup.status='ok';
    newgroup.stack=[];
    
    var oldRoot = root;
    root = newgroup;
    
    try {
        fun();
    }
    catch(e) {
        newgroup.status=e;
    }
    
    root = oldRoot;
    
    root.stack.push(newgroup);
}
