After further investigation, it appears the watchlist code is more intertwined than we thought. Many of the core changes will need to happen in the same patch before we can proceed with other backend work.
Classes involved include but are not limited to WatchAction, WatchedItemStoreInterface, and WatchItemStore. Basically we want to introduce the concept of an expiry for a watched item, and handling of it should mimic expiries for blocks and user rights. This will involve some architectural decisions that may need extensive review.
The output of this task is a patch that adds the concept of an expiry to these PHP classes. It may involve some back-and-forth before the architecture is settled on. Once merged, we can proceed with work on the other tasks that will make use of the expiries.