Distribute a set theme that you plan to update. Auto-updates will replace this theme, so it should not be customized. Build a child theme on top of it to hold your customizations.
A great example is the Genesis Framework. Genesis is an advanced parent theme that lives in your
/themes/ directory and is occasionally updated automatically by the team at StudioPress. Your live site, though, will use a child theme that inherits and customizes the behavior of Genesis.
If the customizations are minimal enough (i.e. a few lines of custom CSS) you can store them in the option table. You can build a theme settings page with buttons, checkboxes, and dropdowns for simple settings. Freeform CSS can be edited in a textbox and stored in the database as well.
These options will exist separately from the theme and will not be overwritten by theme updates.
Note: This isn't an optimal solution since it separates part of the theme definition and stores it in the database. Though it would accomplish some of what you're looking for, I'd strongly recommend the child theme route instead.