Casting every where

So basically I want know if using a lot of casting is a reasonable way for developing a game engine.
I see casting every where in the UE4, is this Cast<>() different? I see C style cast used, no dynamic casting internally. But where goes the rules of:

“YOU SHOULD AVOID USING CASTING WHENEVER POSSIBLE”
“IF YOU ARE USING CASTING, YOUR DESIGN HAS FLAWS”
“USE VITURAL FUNCTION OR VISITORS, AVOID CASTING”
“STORE THE ACTUAL TYPE, NOT THE PARENT TYPE”

However, what I see in UE4 is that, it has a framework that operates on base classes, when you are using the engine, you create child classes, when you retrieve them, you cast to your type, example:

//define your game mode to use
class MyGameMode : public GameMode {};

//later some where in the code, you need to get the game mode, you do this:
MyGameMode* myGameMode = Cast<MyGameMode>(GetGameMode());

This is typical in UE4, is this casting good? Here is also screen capture of finding references of Cast in the engine, it is a huge list: