Для чего-то базового вы можете захватить исходный текст, использовать усы, чтобы применить логику, а затем положиться на метод смещения replaceText, рекомендованный в документации API.
let requests = [];
let contents = doc.body.content||[];
contents.reverse().forEach(content=>{
const paragraph = content.paragraph||{};
const elements = paragraph.elements||[];
const paragraphContent = elements.reduce((acc, obj)=> { return [...acc, obj.textRun.content]}, []);
var parts = paragraphContent.join('').match(/{{#(.*?)}}(.*?){{\/(.*?)}}/g)||[];
parts.forEach((part, index)=>{
requests.push({
replaceAllText: {
containsText: {
text: part,
matchCase: true,
},
replaceText: mustache.render(part, objMerge)||'',
},
})
})
})