Делаем просто:
const result = Object.values(cars.reduce((acc, n) => (
  (acc[n.make] ??= { make: n.make, attr: [] }).attr.push(n),
  acc
), {}));
Делаем сложно:
function group(data, key, val = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const getVal = val instanceof Function ? val : n => n[val];
  const result = new Map;
  for (const n of data) {
    const k = getKey(n);
    result.set(k, result.get(k) ?? []).get(k).push(getVal(n));
  }
  return result;
}
const result = Array.from(
  group(cars, 'make'),
  ([ make, attr ]) => ({ make, attr })
);