Running a script via module vs script mode in the BGE
Why does running a script via Module mode require importing bge?


Because the import statement is the proper way of writing Python code.

The auto-import within script mode is a dirty shortcut. It is still there for backward compatibility. But it is no good design.

Pro


You always need it to access the the BGE context anyway. 
(In module mode you do not really need it as you can get access via function arguments.)
Bge is not a real Python module. It is a wrapper around the BGE native code.


Contra


It violates the Python convention to show where objects are coming from (defined by the code or imported from other modules)
It hides the fact that this module is imported at all. So a reader will never see an explicit assignment to bge.
The bge module should behave like regular Python modules, so it should be imported as any other Python module too.


I strongly suggest to add the import statement in script mode too and ignore the auto-import.

I hope it helps