Решение найдено - естественно надо все делать через буфер - иначе правильно склеить мультибайтные символы не получается
Код примерно такой (для порционного чтения без разбивки на строчки):
var buf=new Buffer(400,"utf8");
var op=fs.openSync("new.txt","r+",777);
var stripBom=require('strip-bom');
var rl=fs.readSync(op,buf,0,20,0);
var ofs=rl;
while (rl==20){
rl=fs.readSync(op,buf,ofs,20);
ofs+=rl;
}
var result=stripBom(buf.toString("utf8",0,ofs));