I wonder if we are a bit too quick to close story-id questions with accepted answers as duplicates
Yes, that might be so, but there are some challenges to doing what you propose...
I have often thought that to reduce the existential tension between a question that "feels like it needs to be closed" and the need for a community to work together to optimize the outcome, the quality of the answers and their findability in the future, an modification of the close process could be considered in the future.
...just that we could leave it 24 or 48 hours after the answer is accepted to give it time to get some love.
I'll give a couple of concrete examples of community-based love-giving to questions that probably needed to be closed, but benefited from a delayed closing in order for at least several answers to be posted. They are in a high question-rate site, but one where questions are given not only love but significant respect.
There could be several other reasons why an inevitable, but delayed close would have some advantages when applied to a question that isn't bad, but for some reason shouldn't be left open forever, and besides allowing for the possibility of a few more answers is of course longevity on the HNQ.
I think that sometimes the urgency to insta-close stems from a mistrust of the community. "I know this question must not be answered, so I must make all possible haste to prevent the posting of answers".
Perhaps a 24 hour or 4 our delayed close could be in Stack Exchange's future. I'm not up to proposing it as a feature request certainly, but in the quieter and/or more evolved communities it could certainly come in handy.