The key part of the docs for @everywhere to catch is “Execute an expression under Main”. So in scriptC when you have those @everywhere’s inside your module, that code isn’t evaluated in your module, its evaluated in Main, so you end up defining Main.forallworkers on all processes. You can see that even on the main process, modMWE.forallworkers isn’t defined.
The two things you can do are 1) remove the @everywheres from inside the module and evaluate the entire module definition on all workers, so @everywhere module modMWE .... Then modMWE.caller(1:5) will work, or (better) 2) turn this into a bonafide package with a Project.toml and src/ directory, etc…, then using modMWE automatically loads the module on all workers, without the need for @everywheres anywhere.
Edit: I should also say, welcome, and thanks for posting a really clear MWE!