“Events” are just a fancy name for “Virtual functions that don’t return anything and can run at the top level of the game loop.” This is why events can use things like Delay, which requires simple continuation support, which is hard to implement when there’s a call stack involved.
This means that the built-in “events” can be virtual functions that the engine can call as appropriate, without having to “bind” the event. The engine simply calls the function on the class, no binding needed.
The most obvious instance of this is Tick(), which obviously doesn’t go through dynamic binding for most actors – there’s a whole subsystem for how to tick things with as little overhead as possible, which revolves around calling the Tick() virtual function without any manual event binding. (Making that all work together with blueprint overrides and still supporting Delay adds a fair bit of extra glue code compared to native ticking, btw, so in blueprint it’s more overhead than C++.)