It simplifies the implementation, as Andy Prowl says. That possibly answers "Why", but it doesn't say how it does that.
A function with only a return value, and more specifically one without local variables, is a special situation for a compiler. This function is now comprised of a single expression: the function's AST needs only to have a single root. That lack of variables means this expression can be evaluated without a full-blown virtual machine to process it, rather a simple tree expression evaluator can be used. For various reasons the compiler probably already has such an evaluator, or could create one relatively easily (it becomes a tree simplification pass).
Knowing that only constexpr is used inside the expression also provides a key simplification. This guarantees that each vertex in the function AST has the same properties, even if it is a function call. The entire constexpr mechanism is then a generalized form of const-folding. And though it isn't always done at this high level in the compiler, it ensures it can be implemented without a huge effort (compared to a full VM).
Back to the "why" question. The restriction is driven primarily by resource limitations on the vendors. This feature, as specified, is not a huge effort and thus the vendors can actually implement it in a reasonable period of time. If there were no such restrictions, in particular allowing local variables, it greatly increases the amount of work needed. From the user's perspective (us, the programmers), the restrictions are however entirely arbitrary.
constexprfunction from another one, for example)constexprit could have been written as a variable and a loop, even though it's usually used as an example of recursion for some reason)constexprfunction with arguments only known at runtime.