sycho: no entiendo porqué solo puedo tener activo un relé. Con 4 bits tengo 16 valores. Solo necesito 10 valores, con buscar el binario que coincide con los puertos que quiero tener abiertos o cerrados y mandarlo en forma de 4 bits...
Exacto, tienes 16 valores. Pero como codificas por ejemplo que se encienda en 1 y el 9?
De esos 16 valores te serán útiles 11. Un valor significará todos los relés a off y los demás 10 corresponderán a cada uno de los relés.
Para la idea de Akenafab puedes utilizar registros de desplazamiento que se cargan mediante una comunicación síncrona (data, clock y latch). Por ejemplo con dos 74HC595 (tienen 8bit cada uno) en cascada (Q7' del primero al data del segundo) tendrás 16 salidas utilizando sólo 3 pines del pic. Para manejarlos tendrás que enviar 16bits en serie síncrono (datos y reloj) y posteriormente "latchear" para que se propaguen a la salida. La comunicación es equivalente a un bus SPI (data, clk, LE)...
De ésta forma SI tendrás control independiente de cada relé.
Si quieres ahorrarte los ULN2803 puedes intentar conseguir registros de desplazamiento con drivers incluidos como TPIC6B595 o MIC5821. Éstos son capaces de dar 100mA por cada salida y hasta 500mA en total.
También tienes los denominados "expansores de bus" por i2c (2 líneas), por ejemplo:
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3376/ln/en