Learning functional programming doesn't mean to forget what you already know. For fixed two-dimensional coordinates, I would just use the following:
sum = [p1[0] + p2[0], p1[1] + p2[1]]
If you don't know the dimension of your coordinates, or if it's large, the next best in this case is to use a list comprehension, which for some reason a lot of people forget about, or don't think it's "functional enough," because it resembles a for loop. However, it is more powerful than a for loop as it is an expression that can be assigned, can be evaluated lazily, and is parallelizable if you don't introduce side effects.
sum = (p1[i] + p2[i] for i in [0..(p1.length - 1)])
If you had a bunch of these to do, like addition, subtraction, multiplication, etc. you typically would create a function to do the iteration, which takes another function as an argument for what you want to do to each pair. It would look like this:
corresponding = (p1, p2, f) -> f(p1[i], p2[i]) for i in [0..(p1.length - 1)]
And you would use it like this:
sum = corresponding(p1, p2, (i, j) -> i + j) diff = corresponding(p1, p2, (i, j) -> i - j) prod = corresponding(p1, p2, (i, j) -> i * j)
Granted, that's not much shorter than the list comprehension, but a real world corresponding
function would probably be significantly longer due to error handling.
Note that these examples are in CoffeeScript, as I'm not familiar with underscore.js, but the solutions are fairly typical of functional programming.