Clients do not host sessions. The server hosts, clients join, and replication only happens from server to client. You can call your OnRep manually anywhere you want, it is just a function, but it only gets called automatically on a client when a replication update is received from the server.
I don’t really understand what your problem is specifically, but judging from your previous statements this might clear up some confusion for you: The server can host a game and clients can connect to that server. If it is a listen server, there can also be a player on the server, but that player is then authoritative, there is never a “client that hosts the session”. Clients receive replicated values from the server (in your case the value of ViewTarget). So it makes sense that the OnRep function is not called for the player on the server, because the value on the server is what is being sent to the clients in the first place (although this might be different in Blueprint, it is the case in C++). Consequently, you have to call SetViewTarget(ViewTarget); on the server manually, which you do by calling the OnRep function manually.