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

BT Tasks do have a tick, its just not called Tick. I believe its called TickTask? You can see the overrides in a blueprint task and just add the correct one. ExecuteTask starts a Task, TickTask updates it, AbortTask ends it prematurely (or Tick returns a fail/success result).

Have a look at BTTask_MoveTo.h as an example in /Source/Runtime/AIModule/BehaviorTree/Tasks/ for the C++ versions.