The script library allows the application to register its interface to the scripts in separate configuration groups. Access to these groups can be set on a per script module basis, which means that one script engine can expose different interfaces to different scripts. The configuration groups can also be removed and replaced during the life time of the application.
This is a bad choice of name for this object. It should have been called a thread. A context contains the function stack for the currently executing function, nothing more.
You can have several context executing in parallel, though only one should be active at a time (unless you use multithreading). This means that contexts can be suspended and resumed at the will of the application.
This the object where the application exposes the interface it wishes the scripts to have access to. It is the central object from which all others are accessed.
If you want to expose different interfaces to different scripts you should use the configuration groups to define exactly what each script module has access to.
You may think of these as DLLs, if you wish. A module contains a set of functions and global variables. The values of the global variables are stored in the module, thus are shared between all contexts executing functions from that module.
The functions/global vars that a module must contain is defined by the application. The script library makes no assumptions, i.e. there is no predefined function like 'void main()' that must exist. It depends on what you want the application to be able to do.
A section can be thought of as a script file. The section must contain complete syntactic units, i.e. you cannot put half of a function in one section and the other half in another section. The order in which sections are added to the module doesn't matter. All sections in a module share the same scope and can thus use functions/global variables declared in other sections.
The name of the section, is only used to help the developer localize compiler errors, etc. To the script engine, the name doesn't matter, you may even use the same for all sections, or no name at all.
Once a module is compiled the script section is removed from the engine. Thus to compile the module again, all of the sections has to be added once more.