Quoted from gmpreussner’s answer on this UObject Replication question.
The first class in the UObject class hierarchy that implements replication is AActor. All game relevant objects that you wish to be shared between server and clients have to be Actors.
UObject is the most basic class in the Engine’s object system. You can think of it as ‘object’ in C# and Java. A game can have tens of thousands of UObject instances at any given time, many of which are not even relevant to the game. Imagine what would happen if they were all replicated! Hence it is the purpose of AActor to implement game relevant classes that can be replicated.
You said you like UObjects because they are easier to create. Are you perhaps using them simply to transfer data? In that case you may want to consider UStruct properties on your Actors.
If you are using the UObjects to replicate or share behavior, then you may want to consider function replication on your Actor instead.
If you are looking for a way to share data or behavior between different actor classes, or if you want to compartmentalize it to better structure your code, you may also consider Replicated Actor Components.
UE4’s replication system by default will not allow cheating if used properly. Since the things you do not want the client to know about, are ran only on the server.
To better understand ue4’s replication i would recommend following the blueprint replication tutorial on youtube.