Сам понятия не имею как он работает нативно, всегда через express его использовал, но очевидно что результат он возвращает и далее его отдают уже через веб сервер, при этом умеет кешировать шаблоны. А str вполне может быть надо сначала считать с файла и отдать в функцию кеша.
var template = ejs.compile(str, options);
template(data);
// => Rendered HTML string
ejs.render(str, data, options);
// => Rendered HTML string
ejs.co