I suppose you might be able to do something with that, but it might be a bit clunky. That function is actually used by the SimpleTagProvider system to create a store for the extensions, but you don’t have access to the one it makes. You would be creating one in order to organize your tag objects, but it would really just be a storage mechanism- the objects in the tag store don’t show up anywhere. That is, you would still need to use the SimpleTagProvider to expose them.
The tag stores made by that function are only internal. In terms of how they work, the tag store is wrapped up in a tag provider, which watches it, and then actually executes the tags. If you were going to use one, you would call that create method (first with an id of 0, and then subsequently with the id that was created by that- it will be valid after restart, like you thought), then register a config listener, and then call startup. After calling startup, all items will be delivered through the config listener.
Ultimately though, I’m afraid that going this route will be a bit cumbersome. It seems that perhaps what you really should be doing is creating an OPC-UA driver, where the user would then create SQLTags on their own, which would persist forever. Unfortunately, that system is a bit more complex that this one.