For SCCS, VC implements tags itself; these tags are visible only through VC. Most later systems (including CVS, Subversion, bzr, git, and hg) have a native tag facility, and VC uses it where available; those tags will be visible even when you bypass VC.
There is no support for VC tags using GNU Arch yet.
Under older VCSes (SCCS, RCS, CVS, early versions of Subversion), renaming and deletion could create some difficulties with tags. This is not a VC-specific problem, but a general design issue in version control systems that was not solved effectively until the earliest third-generation systems.
In a file-oriented VCS, when you rename a registered file you need
to rename its master along with it; the command vc-rename-file
will do this automatically. If you are using SCCS, you must also
update the records of the tag, to mention the file by its new name
(vc-rename-file does this, too). An old tag that refers to a
master file that no longer exists under the recorded name is invalid;
VC can no longer retrieve it. It would be beyond the scope of this
manual to explain enough about RCS and SCCS to explain how to update
the tags by hand.
Using vc-rename-file makes the tag remain valid for
retrieval, but it does not solve all problems. For example, some of the
files in your program probably refer to others by name. At the very
least, the makefile probably mentions the file that you renamed. If you
retrieve an old tag, the renamed file is retrieved under its new
name, which is not the name that the makefile expects. So the program
won't really work as retrieved.