Lisps do that distinction because they need it. In R, you can do everything with functions, because arguments can be lazily evaluated, or you can even get the syntax tree used for that argument at call site instead. So in R, a macro is just a function.
And yes, it's easy to break stuff that way. Just as easy as it is with macros (esp. non-hygienic ones).
I'm not saying it's a better way to do things. It trades having fewer primitives (and hence simpler language structure) for performance. But the use of lazy evaluation is pervasive in R in general, so it's a conscious design decision that they made.
And yes, it's easy to break stuff that way. Just as easy as it is with macros (esp. non-hygienic ones).