I like your idea of using timer and RE and will probably incorporate it in my own plugin.
Another way to implement the RE searching is:
separatorString = view.settings().get('word_separators')
separatorString = re.escape(separatorString)
...
foundRegions = view.find_all(r'(^|%s\s])%s(%s\s]|$)'%(separatorString, currentWord, separatorString))
...
The results could include the separator before and after, so you have to strip them.
Not sure itâs better than your solution.