Making an array of arrays

This will compile at least:

prog_uint8_t pattern1[] PROGMEM = {2, 14, 44, 95};
prog_uint8_t* test[] PROGMEM = { pattern1 };

Sizeof isn't going to do you much good though. Size of any of your array pointers will be 2. You'll have to store the sizes in an array somewhere as you suggested.