To put it simple remote events are 1 way, so you can only go from server to client or vice versa, or server to server or client to client, where as Functions are 2 way, they can go back and forth, hence, the word “Callback”. For example this is how they communicate “Call me back if you return true or something that isnt nil!”. If you want to learn more about it, there is plenty of tutorials or: Remote Events and Callbacks | Documentation - Roblox Creator Hub
You use RemoteEvents when you want to do something.
You use RemoteFunctions when you want to do something and get something in return.
It’s as simple as that tbh, for example, If you want to do something on the server, you send a RemoteEvent to the server whereas if you want information on the client, you fire a RemoteFunction and on the server, have a function that is returning something meaningful.