Isn't there some way to instead just switch the order of the parsing? Like censor the words after everything has already passed through the bbcode parsers?
You mean before. Anyway, future posts will have this censored, as censoring is done when the post is added (to reduce load) and on the fly (to make sure new words are censored as well).
No I do mean after unless the htmlspecialchars() function is not called within the bbcode parser functions. That way the censoring would be the last function called, after all htmlspecialchars() and the <>s would be preserved.