All permutations of a sum
Return consistent types

Both functions may return different types. For example combos may return an array or undefined. It would be better to return consistent type from all execution paths.

Input validation

The sum function does some input validation, checking if its parameter is an array. But this is too late. It's better to do input validation as close to where you receive the input as possible.

Also, there's no need to require nonempty input. If the input is empty, your algorithm will correctly return 0 as sum or empty array for combos, and that's all well.

Algorithm

In the current algorithm it's inefficient that the sums of arrays are recomputed every time you add a new element, when you could easily know the sums so far. It would be better to use that knowledge and avoid unnecessary recomputations.

To avoid creating results that are duplicates, your algorithm would need a substantial rewrite, which is off-topic here.