Where is it best to store a reference of the user-selected default?
It doesn't matter.
As you have to get the message from the second table, you always have to inner join it , and add a where clause, to get the right one.
So the only thing would be size.
A boolean needs 1 byte.
Your default_user_address_id would be bigint which needs 8 Bytes, so as most people have only 1 address or maybe two, you would save space with Booleans.
So my vote would be for number two, as it would save size.