Allow users mark posts as “complete”?

You can use a “custom field” for marking the items as complete. These are also known as post meta fields. To set and read these fields, you’ll use the WordPress functions update_post_meta() and get_post_meta(), respectively.

As for actually allowing users to set this flag from the frontend, AJAX seems like the best way. Check out the Codex article on AJAX, specifically the section titled “Ajax on the Viewer-Facing Side”.

You can build this all out as a plugin, or you can simply include your code in your theme’s functions.php file.