How are my own themes updated?

You can use this ThemeUpdateChecker class

Basic outline of the process:

  1. Have a fixed spot on your server to both house a little bit of data about the current version and a zip of your theme files.
  2. Hook an action into pre_set_site_transient_update_themes
  3. In that action, ping your server (with something like curl)
  4. Compare the versions of both the local and remote themes.

Two more references: