Thanks for the thoughtful reply, Nigel. I'm glad the issue is at least understood and given its due respect.
The recommendation from enlace oculto is:
To store information in a database, I would use a char column-type to store the whole America/Santiago time zone identifier and another char column-type to store the date/time (in the yyyy-mm-dd hh:ii:ss format).
(emphasis added)
There are examples at that link why storing a timestamp, even in UTC, is not reliable. Short answer: because of DST and each location can change its locale or DST rules.
An added benefit of storing in that recommended format is human readable database values.
This is also how The Events Calendar (the only WP calendar that handles time zones) stores the data: enlace oculto -- although it would be better if it allowed storing a different time zone for start time vs end time, as Google Calendar does.
To your idea of storing timestamps ensuring they're always set to UTC, I'm guessing by getting PHP's UTC offset and adjusting to be +00:00 offset, that's to my point... that's unreliable. Alternatively, if you were to use date_timezone_get() to convert the user input to UTC, why? That would be turning good data (datetime + zone) to bad (timestamp without zone).
With the time+zone data saved explicitly, I can ensure I'm choosing a specific datetime in a specific zone in the input UI (Types), and the output UI (Views) can allow me (e.g. "check this box to display time zone alongside datetime") to display the zone on the front end.
Bonus: when choosing the output format, it'd be sweet if MomentJS was easily supported to display the time and zone in the user's local (browser) time (just as an option or via a custom plugin), not needing to be the default.
Let me know if you've got follow-up discussion items.