What exactly do they do?: They add lua bindings to engine functions/custom functions that garry has not added, will not add, etc.
What is the point of it: Say you take a binary modules such as…RawIO for example. Garry made it so that raw lua can not write or read files outside of the garrysmod folder, making this module useful for reading information outside of the folder.
What are they used for: They are typically used for people who need extra functions that can’t be done in lua
What can they be used for: They can be used for pretty much anything you can code in C++. This ranges from cheats, to useful modules connecting lua functions to API’s (such as the Steamworks API, allowing you to make chat clients in lua, or to interact with the steam program via lua functions)
How is it better then a lua script in the lua folder: Like I said, most of the time a binary module is only made/used when it cannot be done in lua, otherwise it just isnt as portable since you can’t stream the module to the client when they join.
The questions are kind of redundant, but I tried to answer them the best I can.
Binary modules are just DLL’s loaded into gmod to add extra lua functions that you simply cannot make in lua, that’s it. Sometimes they fix things, sometimes they add things, sometimes they don’t do a whole lot.