D'accord alors si c'est installé sur le serveur du client ça ouvre beaucoup plus de possibilités.
Ce que tu peux faire pour savoir si un module est installer c'est, très naïvement, avoir une table modules avec ta liste de module, et dedans un boolean pour dire si oui ou non le module est activé. C'est pas très glamour, j'en conviens, mais ça fera très bien l'affaire. (Sinon tu peux y stocker dans un fichier de config pour ne pas avoir à faire une requête en plus à la base de donnée à chaque fois, c'est aussi une éventualité intéressante si tu recherche en plus la performance).
Pour wordpress, je suis pas sûr, mais il me semble que c'est le module qui dis à Wordpress "Hé je suis là, éxecute mon code".
Après pour ce qui est de l'organisation du code, le mieux est de considérer que chaque module est un package Laravel (plus d'infos sur la doc) donc avec un ServiceProvider, une config, des migrations, ...
Tu met tout ça dans une gros dossier modules à la racine de ton projet, ensuite chaque module aura son sous dossier avec dedans sa structure (Models, Config, Database, ...)
Ensuite dans ton composer.json tu viens mettre dans la section PSR-4 le lien vers ton dossier module pour qu'il autoload tes modules (Franchement là je te conseil de regarder ce que Laravel et de faire quelques petites recherche sur Google pour mieux comprendre l'histoire du PSR-4. C'est pas compliqué mais là comme ça à froid je serais incapable de l'expliquer) Et 🎉 tada, tu as ton petit système de module indépendant.
Il y a d'autres petits détails encore à voir, notamment pour que chaque module puisse détecté si il est activé où non, mais dans l'ensemble avec ça déjà tu aura un code bien structuré et une bonne base pour travailler efficacement
Ah et aussi tant que j'y pense, ça pourra aussi te permettre de testé tes modules indépendemment. Et ça c'est super cool!