Why cant we use delay() from KismetSystemLibrary in c++? Whats the mistery behind it?

Delay is latent function.
The long story short there is some magic behind scenes, which create proxy objects, which are reponsible for keeping state of delay (or any other).

You can’t use it in C++, because latent blueprint functions are very specific to how blueprint works.

It’s the same why you don’t have state keyword in C++, though you can achieve state machine in many different ways.

What are you essentialy asking is using timer, tick or manually created proxy object, which will make callbacks to the object, which created it.