We generally say that a programming language is higher-order if it can sensibly represent functions which both accept as arguments, and return as results, other functions. This usually means that there is a notion of lexical scope, and that nested functions retain values bound in their parent scope (hence the notion of closure).