Why would you store the post id and the archived id ? Don’t you only need to filter which offers need to be excluded ?
I don’t see that (the user meta becoming big) as a problem right now. It’s just an array of ids.
A button is also an option. The function will almost be the same then.
You could maybe also store the info in a transient but I’m not sure if transients are meant to be used for this, although technically I don’t see a limitation.