Я думаю, что в этом случае имеет смысл сохранить счетчики для каждого пола в объекте, а затем в функции уменьшения, увеличить счет и создать последнюю строку "guestId" из счетчика, хранящегося в объекте.
Этот код достигает желаемого результата:
const guest = ["male", "male", "female"]
const counts = { male: 0, female: 0}
const r = guest.reduce((accum, g, index) => {
counts[g] += 1
const guestId = `${g}${counts[g]}`
accum.push(guestId)
return accum
}, []) //expect to be [male1, male2, female1]
console.log('r', r)