To get back on this, I have currently solved it in the following way:
###/lib/nodebb.js:
module.exports = {
"Meta": module.parent.parent.require('./meta'),
"User": module.parent.parent.require('./user'),
"Plugins": module.parent.parent.require('./plugins'),
"SocketIndex": module.parent.parent.require('./socket.io/index'),
"ModulesSockets": module.parent.parent.require('./socket.io/modules'),
"db": module.parent.parent.require('./database')
}
###library.js:
var NodeBB = require('./lib/nodebb');
###/lib/submoduleX.js:
var NodeBB = module.require('./nodebb'),
db = NodeBB.db,
User = NodeBB.User,
Plugins = NodeBB.Plugins;
##Why this works
I read somewhere that require caches the files you load. That means that if require my nodebb.js from library.js, I can later load nodebb.js from any submodule I want and it will work.