Glad to see a command line compiler built with doT! :)
Some suggestions:
in Template.js instead of mixing def and vars into one object to avoid unplanned collisions I think it would be better to just set varname as "it, defs" vs just "it" and then pass defs as a second parameter into the generated function.
Have "includes" files that are put into defs as properties and can be referred from other templates. We do this in bebedo. We didn't need a generic solution and just have includes folder that is put into global defs and then can be used from other templates with {{#defs.header}} for example (instead of linking by file name and loading the file every time)
My tests are pretty much required to be run on my system because the file length check is based on the output of the FILE constant on my system.
I still want a way to test the FILE constant, but a file length check should not include the usage of this constant, or any other constants that would output file system paths. Those should just be in a separate test.