My solution has three parts:
Implement an "unknown gap threshold."
Introduce a new table (or alternatively, you could repurpose the "Risk of Homelessness" table) that includes a bunch of date-stamped housing values. This would contain values like "on Thursday, Client Y was Homeless" or "on Saturday, Client Z was Housed." This is a date-stamp value as opposed to a date-range, so it does not have a duration. You're not asking for a start or end date. You're just saying they were or were not homeless on a specific date. Adding a value here should force the client's Housing Status to update, but since we have an "unknown gap threshold," above, the client will retain that status for X number of days. So if the "unknown gap threshold" is set to 7, you mark them as homeless today and they keep a Housing Status of "Homeless" for 7 days.
Have a way to bulk mark clients as homeless via the Encampments and also the Group Activities module, or via some version of "Block Operations."
Technically, the behind-the-scenes behaviour would need to be: When this new type of date-stamp is added, immediately update Housing Status. Update the nightly stored procedure to also check this table. Update the stored procedure to also check to see if the most recent information is >X days ago.
See also: Allowable Unknown Gap Threshold