Why is BP slower than pure C++ ?

Blueprint functions are objects containing info about the C++ function to call. These objects have a runtime cost, they cost cpu, ram, etc.

They can’t be inlined by the compiler, accessing objects in RAM will always be slower than accessing objects in L1, L2 or L3 cache levels or inlined methods.

Calling a C++ function directly, skips all of that depending on what exactly you’re doing and if compiler inlined your function or not;
But it’s way easier to make “stupid moves” in C++ than Blueprints and it’s unforgiving if you do so.