It is very normal to run “a server” for a leaderboard 24/7. That’s pretty much the only way to do it. (Although you may choose to use Steam or Epic Games Services or Xbox Live or whatever to run them for you.)
Using an Unreal server to run that function is, however, not a common choice, because the “connect to server” and “disconnect from server” often ends up being very disruptive to flow within the game itself. You can’t join two servers at once, so you can never check leaderboards while also trying to join or play in some actual game instance.
There’s also scalability problems with using unreal networking for something that’s not actual persistent game session. Leaderboards should be hittable by 10,000 people a second using a simple web service – the Unreal server joining system cannot come close to that level of throughput. Of course, if you only ever have 40 players online at once, then that might not matter so much.
Logic being “pretty complicated” for leaderboards is probably a relative term. I would be very surprised if you couldn’t re-write the same logic in PHP or Rust or node.js and it would work fine, and at a fraction of the operation cost and much better scalability. You do, however, still need to “trust the client” unless the outcome of games is separately reported by a trusted game server that you in turn host.