As a quick thought, rather than building a whole parallel interface to manage hidden tags, maybe you can prefix all special tags with a specefic character, such as "-private" or "~private". Then you can simply modify the tag display functions to only display tags that do not start with that character.
This would at least be more flexible than hard-coding or building a separate list of tags that you consider "special".
Just a thought!