std::call_once isn't called once

First of all, as good practice, you should never use anything outside the UE4 C++ API to do gameplay programming in C++, so please do not use std functions.

Second, in Blueprint you have access to the “DoOnce” node that does exactly what you need. So if you have a BP class based on this native C++ class you can do that there in the ActorBeginOverlap BP event.
As for callback I suggest you to use UE4 delegates