The way I make 'modules' or libraries of functions in Rebol 2, is like this:
rebol [
Public-Functions: [useful-function1]
]
context [
useful-function1: func [][does something useful...]
helper-function1: func [][does something...]
]
Then I have an 'include' function I wrote which looks in the loaded file's script header for the 'Public-Functions' block.
eg. if the above code were in a file named my-library.r, then I would set the 'useful-function1' word into the global context like this:
include [%my-library.r [useful-function1]]
and now I can use 'useful-function1'.
How does 'include' work?
Basically, 'include' DOes the file, which, thanks to 'context', returns an object with the word/values of the functions 'useful-function1' and 'helper-function1' "trapped" inside it. Then, to bring the desired/allowed word out into the global context, it just does:
set 'useful-function1 get in returned-object 'useful-function1
That's it, it's ready to use by the application.
Of course, 'include' does more than that; downloading libraries (specified as urls) from the internet, ensuring the asked-for words are advertised in the Public-Functions block, giving nice error messages, etc.
So that's how I basically manage my "modules" in Rebol 2.
(I have built about 200 library files using the above system.)