Один из вариантов - использовать два сокращения следующим образом:
const input = [{
a: 'meow'
}, {
a: 'woof'
}, {
b: 'moo'
}];
const result = input
.reduce((itemResult, item) => Object.keys(item)
.reduce((keyResult, key) => ({
...keyResult,
[key]: (keyResult[key] || []).concat(item[key])
}), itemResult), {});
console.log(result)
Не уверен, что это неуклюжий по сравнению с вашим текущим решением, но он довольно лаконичен и не требует внешней библиотеки.