My point is that - if I'm right about how your game works - finding the "definite" solution is lots of work and might result in bugs.
Simply letting the player know which events are "stale" and therefore candidates for stalling progress (without the program itself having to understand which these events are) was my idea for a workable solution.
That there might be more than one event that gets highlighted (when/if player asks for help) isn't an issue as I see it. You simply click both if you have to. (Perhaps you'll have to cycle through to next week to catch them both, but still)
The frustration you speak of is that as a player you're told "something needs to happen" with exactly zero clues as to how you make that happen.
What I needed to be told when the game stalled on me is
"there's an event that is holding up progress". This might sound obvious to you, but really, the first time you play the game I considered "the game is buggy" or "I need to visit the office" or "A number of weeks must pass by" or something else.
Once you tell the player this (ideally right in the "something needs to happen" dialog), the next step is a given: which events could be holding up the game? Again, to you the answer comes immediately: events that are green. But the player doesn't necessarily know that. It could be that the events must be played a number of times (though without the visible progress meter of girl relations) or that you played them in the wrong order...
But don't tell the player it's the green events. Instead tell the player which events haven't been played in a long time, since that is likely exactly the "forgotten" event.
And this is exactly what my suggestion is intended to answer!
So in short, if the "Something needs to happen" message becomes "There's an event you haven't experienced. Click Help for a clue" or somesuch, I believe the issue is fixed to the players' satisfaction.