If all you want is to add two numbers together, a function will be sufficient:
(def meta (x y)
(+ x y))
Macros are usually only used when trying to accomplish something that cant be done with a regular function.
If you want to accept an arbitrary number of arguments, the following would work:
(def meta (x . y)
(apply + x y))
or:
(def meta xs
(apply + xs))
This could also be accomplished with a macro:
(mac meta xs
`(+ ,@xs))
In your original definition of meta, arc thinks that y is a list since it follows the dot syntax (x . y) It then throws an error when it evaluates (+ 1 (2)) because it doesn't know how to add a number to a list.
It looks like pr prints out all its arguments and then returns its first argument. You can safely ignore the final value. If pr was used in a web page to print out some text, the return value would never be seen.
As far as the @ symbol, the following code causes an error:
arc> (mac meta xs
`(+ ,xs))
*** redefining meta
#3(tagged mac #<procedure>)
arc> (meta 1 2)
Error: "Function call on inappropriate object 1 (2)"
xs will have a type of 'cons in this situation. Which means it sees it as (element . list). So for your example it'll see it as 3 (3 4 5 66 67). It just happens that pr deals with cons types well.