question in title.
I've looked for the answer but no one really goes into detail and the wiki is very vague.
Fire is an actual object while FireServer is a function of the RemoteEvent class.
Edit: The Fire Function, BindableFunctions and BindableEvents in general are designed to communicate between client-side scripts while FireServer and it's parent as well as it's parent's brother/sister are used to communicate between the client and server.
Let's say an admin wants to punish a player, but not kick them. I'd use a remoteEvent for this to check whether the player is an admin as well as the type of punishment the admin wants to do. If the server says it's alright then it would fire a remoteEvent on the offending player's client and a localscript somewhere on that client would dish out the punishment.
Can't think of any examples for where I'd use BindableEvents at the moment, but I hope this helps you out.