I've found the tr.func.require section of the specification that requires
My guess is that
std::function was specified (and perhaps voted into the standard) before move semantics. And the didn't have time to review all the rest of the standard in light of this. See also this answer about why shared_ptr deleters have to be CopyConstructible.
Also, for compatibility reasons, it sounds unreasonable to all-of-a-sudden make
std::function move constructible and remove its copy-constructor.