If you're coming from Java or another such language, then anonymous functions and the REPL are must-shows. The former really makes things far more clear and concise; just compare Arc's
(let squares (map [* _ _] nums)
...)
to Java's
ArrayList<Integer> squares = new ArrayList<Integer>();
for (Integer n : nums)
squares.addObject(n*n)
...
. The latter is fantastic for development; rather than having to code up a new test, save, and recompile every time you have something you want to test out, you can iteratively develop your test and run it immediately. This becomes even more of a net win when you realize you need to change that previous test case just a little; instead of open-edit-recompile-run, it's uparrow-edit-run.
If you're instead coming from something more like a scripting language, then yeah---macros and everything they can do is the biggest win.