Hola, no conozco la arquitectura PIC, por lo que entendí, no se de donde ejecutarías tu programa de expansión, ya que como comentas no se puede ejecutar de RAM, si haces funcionar un expansor ( eepron, sd, etc, etc ) no se me ocurre como hacer que se ejecute desde ahi. Con respecto a expandir, mi opinión es que los MCU ( microcontroladores ) están diseñados para un rango de aplicaciones, si te quedas corto si o si tenes que saltar a un micro con mas capacidad o un cambio de familia. Si todo eso no te alcanza ya tenes saltar a un microprocesador o un microcontrolador que permita sacar los buses afuera, como creo que en la familia MicroChip son los PIC24, lamentablemente no todos los fabricantes tienen familias que permitan esto. Aunque parezca que esto sea necesario y nunca pase en el mundo real, hay casos de que si, hace 10 años trabaje en una multinacional que fabricaba equipos con un firmware de aproximadamente 100.000 lineas de código C, se usaba un 8051 ( famila Atmel ) y como tenias la posilibilidad de sacar los buses de datos y dirrecciones, externamente se colocaba una RAM externa de 128Kbytes y una EPROM de 512K bytes. Con respecto a lo de Java, te tiro algunas puntas para investigar, lo más sencillo de implementar son las llamadas "maquinas de stack", podes leer sobre eso y sobre Forth, un excelente lenguaje de programación. Java trabaja asi pero su máquina virtual es sumamente poderosa, posiblemente sea la mejor maquina virtual jamas implementada. También podes leer sobre RPN ( notacion polaca inversa ) muy util para implementar maquinas de stack.
Saludos !