I am going to be creating an email campaign that encourages leads to review their email preferences and select which content they'd like to continue receiving or if they'd like to unsubscribe.
How can I attain the data when a user updates their email preferences?
Same way you'd know if anyone had updated any fields on a form: Change Data Value caused by form fillout.
The details of the Filled Out Form activity contain each set of updates.
Obviously the fields on the lead also reflect the updates, but that's only until they're overwritten by the next update.