Не уверен, что именно вам нужно, но вот мои 2 цента.
Единственный способ динамически создавать переменные в существующей функции - это метод eval, который вы уже упомянули.
Другой вариант (упомянутый другими) заключается в том, что ваша функция берет контекстную карту, а шаблон обращается к ней с точечной нотацией (context.var1)
Мое последнее предложение - конструктор функций. Но я чувствую, что это может быть то, что вы ищете. (Обратите внимание, что конструктор функции страдает от тех же проблем, что и вызов eval)
var arg1 = "first";
var arg2 = "last";
// This is the body of the function that you want to execute with first
// and last as local variables. It would come from your template
var functionBody = "alert(first + ' ' + last)";
var myCustomFun = new Function(arg1, arg2, functionBody);
myCustomFun("Mark", "Brown"); // brings up and alert saying "Mark Brown";
Надеюсь, это поможет