Existen varias maneras
La primera es usar un dipswitch externo, te permite cambiar de forma facil y rapida la direccion del PIC, y solo tienes que hacer una rutina que al inicio lea la configuracion del DIP y la guarde en memoria, la ventaja de este metodo es que es muy facil de implementar y no requiere reprogramar
Otra forma es hacer una subrutina de programacion, grabas el programa maestro con un numero de serie conocido (00000), despues usando alguna combinacion de botones en tu aplicacion ingresas a un modo de "mantenimiento" donde puedes cambiar el numero de serie, al final el mismo micro se reprograma con el numero de serie ingresado
Otra es una variante de la anterior, colocas tu micro en un programador y solo reprogramas la localidad de EEPROM que contiene el numero de serie con un nuevo valor, el problema de esta es que si tienes activada la proteccion de lectura no vas a poder grabar una localidad especifica
Finalmente hay programas mas profesionales que te permiten cambiar automáticamente el numero de serie a la hora de programar los micros, solo los he visto en sistemas de alto desempeño donde se graban miles de micros al dia, pero no dudo que exista algun plugin para MPLAB que te permita hacer lo mismo...