A pure function is a function that behaves like a mathematical function: it maps values from one space to another, the same value always maps to the same result, and there is no such thing as a side effect in a mathematical function.
The level to which programming languages go to ensure that functions are pure varies, and R does precious little in this regard. Because values are immutable, you have some guarantee about which side effects functions can have, but not much. Functions can modify variables outside their scope, for example, they can modify global variables. They can print or plot ...