En mi humilde opinión, la única manera de implementarlo limpiamente es utilizar la extensibilidad incorporada de Android, concretamente mediante el uso de Intents y/o BroadcastReceivers. Esta es la forma en que se supone que las aplicaciones de Android se comunican entre sí, pero también puede funcionar perfectamente para su propia aplicación al crear una versión principal que se puede ampliar mediante Intents mediante sus "complementos" que se pueden descargar por separado del mercado.
Las cosas que hay que aprender y buscar en la web para implementar dicha funcionalidad son
- Intents: aprender cómo se pueden utilizar los intentos para pasar datos de una aplicación a otra o para invocar cierta funcionalidad en otras aplicaciones.
- BroadcastReceiver: Para escuchar ciertos eventos difundidos por la aplicación en sus "plug-ins"
- ContentProvider: El proveedor de contenidos se utiliza para proporcionar una abstracción sobre sus datos y permite que sus "plug-ins" para acceder a los datos de su aplicación fácilmente y muy bien desacoplado a través de los URI de contenido.
- Intent Filters: Se utilizan para indicar al sistema qué tipo de acciones/Intenciones puede realizar mi actividad específica. Los necesitará como una forma de invocar sus complementos (transmitiendo un Intento con la acción/categoría dada) así como para proporcionar un espacio en sus menús donde los Intentos "compatibles" pueden engancharse automáticamente.
Espero haber podido brindarte algunos de los temas que debes conocer. Estoy seguro de que una vez que obtengas una comprensión más profunda de estos, obtendrás una imagen mucho más clara sobre cómo realizar una aplicación modular de este tipo.
Buena pregunta +1 y bienvenido a SO – barmaley