It is sync, but you are not returning anything. Result of _compile is in module.exports.
This is the code I use to require manually (in my case I didn't want it to be cached by module system):
function myRequire(filename) {
var m = new module.constructor();
m.paths = module.paths;
var src = fs.readFileSync(filename).toString();
m._compile(src, filename);
return m.exports;
}