requiring a blueprint to override a c++ function

I don’t know how to trigger a blueprint compilation error, but you could check if the BP function exists in your class PostLoad or some other initialization function. If you check the code that is added to the generated files for the BlueprintNativeEvent you can that it does exactly that to see if it should call the BP or native implementation.