I think you may be making more work than need be.
For example, this CSS adds a “heart” before the tag “css3”
a.discourse-tag.tag-css3::before {
content: "\2665";
}
This is less than ideal because it requires hard-coding the tag’s class attribute value.
But it is simple, works, and as long as you don’t have many tags you want to do this with shouldn’t be that much trouble to maintain.