Can system.tag.deleteTags delete an entire provider?

Some methods, such as "browse()" seem to treat providers as top-level folders:

system.tag.browse() # Returns all my providers, e.g., [default] and [foo]

However, when I try this, it does not work:

system.tag.deleteTags(["[default]", "[foo]"]) # Does not delete them

They do not get deleted.

Is this expected, and is there an alternative way to accomplish such a thing?

Almost certainly not; tag providers are a unique top-level resource and would have go through a very specific code path.

In 8.3.8+ you can use system.config.remove from a script to remove any tag provider definitions.