subserver.js
function(dir, htm, callback) {
    
    var recur = function(str) {
        return s = str.replace(/\{\{include[\s]{1,}[\'\"]([\w\.\/]{1,})[\'\"]\}\}/gi, function(p1,path) {
            if(fs.existsSync(dir + path)) {
                return recur(fs.readFileSync(dir + path, 'utf8'));
            }
            return "";
        })
    }
    
    
    callback(recur(htm))
}
function(dir, htm, callback) {
    
    var recur = function(str) {
        return s = str.replace(/\{\{include[\s]{1,}[\'\"]([\w\.\/]{1,})[\'\"]\}\}/gi, function(p1,path) {
            if(fs.existsSync(dir + path)) {
                return recur(fs.readFileSync(dir + path, 'utf8'));
            }
            return "";
        })
    }
    
    
    callback(recur(htm))
}
Вывод данных в шаблон
шаблон собирается из инклудов один раз
собранные шаблоны остаются в памяти

(синхронные файловые функции тут не влияют на общую производительность)