Yo he programado el PIC16F883 (7kb de programa) con el compilador CC5X y da mucho juego (puedes realizar programas relativamente grandes sin problemas de espacio).
Con el XC8 no lo he probado todavía, porque prefiero trabajar de forma habitual con PIC18. Normalmente tiene memoria de sobra para los desarrollos que hago, pero así me vale el mismo micro para el día que tenga que hacer un programa mayor. La diferencia de precio es pequeña.
Para que tengas una idea, el último programa que he hecho en C con 1500 líneas de código (contando espacios y comentarios) ocupa una memoria de programa de 8Kbytes compilado con XC8 sin optimizar.
El programa es bastante grande como para hacer un montón de cosas con el y el 16f886 tiene más memoria todavía.
Si te decides por el compilador CC5X, es poco conocido y poco estandar, pero tiene la ventaja de que si lo manejas bien, te compila cada línea de C en una o dos líneas de ensamblador. Es muy eficiente incluso en la versión gratuita. Los otros compiladores como el XC8 meten un montón de líneas de código en el paso de argumentos a las funciones. Por ejemplo para pasar un caracter a una función, el CC5X lo manda mediante el registro de trabajo WREG, mientras que otros compiladores pasan el argumento mediante una pila, con bastantes líneas de ASM para una cosa tan sencilla.
Saludos.