I think that now I understand what you didn't understand about BLOCK_SIZE.
First main app usually doesn't have to know what is block size. Only if you use FLASH2FLASH bootloader you must know what is block size.
Bootloader should know what block size is, so you can erase pic page by page.

Because BLOCK_SIZE is used in internally PBP library for CODE WRITE/ERASE, you MUST compile bootloader for each PIC.
So there is no need(also there is no way to pass constant at runtime in LIB) to pass BLOCK_SIZE from main app to bootloader app.
You can't use same HEX for different pic's, for some you can, but for others you can't. Because register map isn't same for all pic.
So no to take any chance, just compile bootloader for different pics and don't worry about PAGE_SIZE.

Conclusion is that you can use same code for almost all PICs, but you can't use same HEX. You must compile, extract and edit bootloader HEX for each PIC you want to use.