How to automatically allocate a page of flash for in-application storage of settings
Just exclude the top page of flash from the available program memory in your linker map, and building should fail with an error at the link stage if program code overflows into it.  You can if you want create a data section in the reserved page and use a pragma to put a data structure there, if you want to hard code the address only in the linker map and nowhere else.

Of course if you contemplate upgrading or downgrading to a part with a different flash size you will have to move it.

Another possibility could be to use the 2nd lowest flash page - you probably need the lowest for an entry point (and possibly the vector table, if that is inflexible?) But that could be one linker section, then a gap for a data page, and then another linker section for ordinary program code extending to the limit of what the current chip has.

Beware default uploads may wipe out your storage by starting with a full-flash erase.