Customizar um software sem interferir em sua estrutura básica

Gostaria de opiniões sobre um novo desafio que irei iniciar.

Tenho um software básico, que realiza tarefas triviais de conexão à banco de dados, relatórios, controle e permissões de usuários e tudo mais necessário para seu funcionamento. Trata-se de uma aplicação web, baseado em VRaptor.

O meu desafio neste momento é permitir que o software básico seja estendido sem que sua estrutura seja alterada.

Por exemplo, digamos que eu precise construir um módulo financeiro. A ideia é que este módulo utilize toda a estrutura básica do software para comunicação com o banco de dados, controle de usuários, etc, e apenas tratasse de suas particularidades. Após o desenvolvimento deste módulo, geraria um JAR e colocaria na pasta de bibliotecas da aplicação básica, e esta por sua vez, incorporaria o novo módulo.

Para quem conhece o OpenERP, é algo semelhante à maneira como ele trabalha em relação aos módulos (porém, é escrito em python).

Alguém tem alguma ideia a respeito de como isto poderia ser viabilizado?

Grato.

Henrique.

Estude reflexão. Entenda o real papel de interfaces.

Talvez seja uma boa entender como os plugins do Eclipse ou Netbeans funcionam.