Sachverhalt:
A.
A.a. Die A._ AG in Liquidation (Beklagte, Beschwerdeführerin) ist eine Aktiengesellschaft in Liquidation mit Sitz in U._.
Am 19. April 2016 fand eine "ausserordentliche Generalversammlung" in Form einer "Universalversammlung" der A._ AG (damals noch nicht in Liquidation) statt. Als einziger "Aktionär" nahm C.C._ teil. Es wurde beschlossen, B._ (Klägerin, Beschwerdegegnerin) als einziges Verwaltungsratsmitglied abzuwählen und neu D._ als Präsidentin des Verwaltungsrats sowie E._ als Mitglied des Verwaltungsrats zu wählen. Die Personenmutationen wurden am 26. April 2016 in das Tagesregister des Handelsregisters des Kantons Zürich eingetragen.
A.b. Das Aktienkapital der A._ AG in Liquidation war zum damaligen Zeitpunkt in 100 Inhaberaktien zu je Fr. 1'000.-- gestückelt.
B.
Am 20. September 2019 reichte B._ beim Handelsgericht des Kantons Zürich gestützt auf <ref-law> Nichtigkeitsklage gegen die A._ AG in Liquidation mit folgenden materiellen Rechtsbegehren ein:
"1. Es sei festzustellen, dass der GV-Beschluss der Beklagten vom 19. April 2016 (Abwahl der einzigen Verwaltungsrätin und Neuwahlen) nichtig ist.
2. Das Handelsregisteramt des Kantons Zürich sei anzuweisen, die dort als Verwaltungsräte und Liquidatoren eingetragenen E._ und D._ aus dem Handelsregister zu löschen und die Klägerin wieder als Verwaltungsrätin und Liquidatorin der Beklagten in das Handelsregister ein zutragen."
Mit Urteil vom 21. April 2021 stellte das Handelsgericht fest, dass der Beschluss der ausserordentlichen Generalversammlung der A._ in Liquidation vom 19. April 2016 betreffend die Abwahl beziehungsweise Neuwahl des Verwaltungsrats nichtig ist.
C.
Die A._ AG in Liquidation verlangt mit Beschwerde in Zivilsachen, das Urteil des Handelsgerichts sei "vollumfänglich aufzuheben". Eventualiter sei die Sache zur Neubeurteilung an die Vorinstanz zurückzuweisen.
Die Beschwerdegegnerin beantragt, die Beschwerde abzuweisen. Das Handelsgericht verzichtete auf Vernehmlassung. Die Beschwerdeführerin hat eine weitere Eingabe eingereicht.
Mit Verfügung vom 3. August 2021 wurde das von der Beschwerdeführerin gestellte Gesuch um Gewährung der unentgeltlichen Rechtspflege für das bundesgerichtliche Verfahren abgewiesen.
Mit Präsidialverfügung vom 30. September 2021 verpflichtete das Bundesgericht die Beschwerdeführerin - wie von der Beschwerdegegnerin beantragt - zur Sicherstellung einer allfälligen Parteientschädigung im Umfang von Fr. 6'500.--. Diese wurde fristgemäss an die Bundesgerichtskasse geleistet.

Erwägungen:
1.
1.1. Das angefochtene Urteil des Handelsgerichts ist ein Endentscheid (<ref-law>) einer einzigen kantonalen Instanz im Sinne von <ref-law>. Dagegen steht grundsätzlich die Beschwerde in Zivilsachen offen, gemäss <ref-law> unabhängig vom Streitwert (<ref-ruling> E. 1.2; siehe auch <ref-ruling> E. 1.1, 2 E. 1.2.2).
1.2. Die Beschwerdeführerin beantragt einzig die Aufhebung des angefochtenen Urteils beziehungsweise "eventualiter" die Rückweisung der Sache an die Vorinstanz. Einen materiellen Antrag, wie er nach <ref-law> erforderlich ist, stellt sie nicht. Indessen geht aus der Beschwerdebegründung mit genügender Klarheit hervor, dass die Beschwerdeführerin in der Sache die Abweisung der Klage verlangt.
2.
Das Bundesgericht legt seinem Urteil den Sachverhalt zugrunde, den die Vorinstanz festgestellt hat (<ref-law>). Dazu gehören sowohl die Feststellungen über den streitgegenständlichen Lebenssachverhalt als auch jene über den Ablauf des vor- und erstinstanzlichen Verfahrens, also die Feststellungen über den Prozesssachverhalt (<ref-ruling> E. 1.3.1 mit Hinweisen). Es kann die Sachverhaltsfeststellung der Vorinstanz nur berichtigen oder ergänzen, wenn sie offensichtlich unrichtig ist oder auf einer Rechtsverletzung im Sinne von <ref-law> beruht (<ref-law>). "Offensichtlich unrichtig" bedeutet dabei "willkürlich" (<ref-ruling> E. 2 S. 117; <ref-ruling> E. 1.5). Überdies muss die Behebung des Mangels für den Ausgang des Verfahrens entscheidend sein können (<ref-law>). Neue Tatsachen und Beweismittel dürfen nur so weit vorgebracht werden, als erst der Entscheid der Vorinstanz dazu Anlass gibt (<ref-law>). Die Partei, welche die Sachverhaltsfeststellung der Vorinstanz anfechten will, muss klar und substanziiert aufzeigen, inwiefern diese Voraussetzungen erfüllt sein sollen (<ref-ruling> E. 1.3.1 mit Hinweisen). Wenn sie den Sachverhalt ergänzen will, hat sie zudem mit präzisen Aktenhinweisen darzulegen, dass sie entsprechende rechtsrelevante Tatsachen und taugliche Beweismittel bereits bei den Vorinstanzen prozesskonform eingebracht hat (<ref-ruling> E. 2).
3.
3.1. Gemäss aArt. 697i OR - in Kraft von 1. Juli 2015 bis 30. April 2021 - galt was folgt: Eine natürliche Person, die Inhaberaktien einer Gesellschaft erwarb, deren Aktien nicht an einer Börse kotiert waren, musste den Erwerb, ihren Vor- und ihren Nachnamen sowie ihre Adresse innert Monatsfrist der Gesellschaft melden (Abs. 1). Sie hatte den Besitz der Inhaberaktie nachzuweisen und sich durch einen amtlichen Ausweis mit Fotografie zu identifizieren (Abs. 2 lit. a). aArt. 697j Abs. 1 OR statuierte ferner eine Pflicht, der Gesellschaft die an den Aktien wirtschaftlich berechtigte Person zu melden, wenn durch den Erwerb von nicht börsenkotierten Aktien der Grenzwert von 25 Prozent des Aktienkapitals oder der Stimmen erreicht oder überschritten wurde.
Die entsprechenden Übergangsbestimmungen sahen vor, dass den Meldepflichten gemäss aArt. 697i und aArt. 697j OR auch nachkommen musste, wer beim Inkrafttreten der Meldepflichten (1. Juli 2015) bereits Inhaberaktien hielt (Art. 3 der Übergangsbestimmungen zum Bundesgesetz vom 12. Dezember 2014 zur Umsetzung der 2012 revidierten Empfehlungen der Groupe d'action financière [AS 2015 1394]).
Solange der Aktionär seinen Meldepflichten nicht nachgekommen war, ruhten die Mitgliedschaftsrechte, die mit den Aktien verbunden waren, deren Erwerb gemeldet werden musste (<ref-law>). Zu den Mitgliedschaftsrechten gehört namentlich das Stimmrecht (<ref-law>).
3.2. Die Beschwerdeführerin stellte sich vor Handelsgericht auf den Standpunkt, C.C._ sei im Moment der ausserordentlichen Generalversammlung vom 19. April 2016 Eigentümer aller Inhaberaktien gewesen. Er habe die Meldepflichten gemäss aArt. 697i ff. OR erfüllt und an der Generalversammlung seine (und damit sämtliche) Stimmrechte rechtmässig ausgeübt. Die Beschlüsse seien gültig zustande gekommen.
3.3. Das Handelsgericht hielt fest, dass die Eigentumsverhältnisse an den (damaligen) Inhaberaktien unklar seien. Darauf sei indes nicht weiter einzugehen. Denn selbst wenn C.C._ im Zeitpunkt der Generalversammlung Eigentümer sämtlicher Aktien gewesen sein sollte, sei er jedenfalls seinen Meldepflichten gemäss aArt. 697i ff. OR nicht nachgekommen; konkret habe er den Verwaltungsrat der Beschwerdeführerin nicht darüber informiert, dass er Inhaberaktien halte. Die mit seinen Aktien verbundenen Stimmrechte hätten daher gemäss <ref-law> an der Generalversammlung vom 19. April 2016 geruht. Die an der - in Form einer Universalversammlung (<ref-law>) durchgeführten - Generalversammlung gefassten Beschlüsse seien folglich nichtig, sei doch "keine einzige gültige Stimme abgegeben" und "damit kein verbindlicher Gesellschaftsbeschluss gefasst" worden.
4.
4.1. Die Beschwerdeführerin formuliert zunächst eine "Rüge der falschen Sachverhaltsfeststellung und der willkürlichen Beweiswürdigung". Sie behauptet unter Hinweis auf einen "regen Emailverkehr", dass die Inhaberaktien C.C._ gehörten und dies der Beschwerdegegnerin als damaligem einzigen Verwaltungsratsmitglied schon "seit Jahren" ("mindestens" seit 2012) bekannt gewesen sei. Auch über seine "Familienverhältnisse" sowie "seine Personalien, seine Adresse und seine Passdaten" habe die Beschwerdegegnerin Bescheid gewusst, was sich "aus zahlreichen Gesprächen" ergebe. Die Beschwerdeführerin gibt verschiedene E-Mail-Auszüge ab dem Jahr 2012 im Wortlaut wieder und führt aus, wie diese Korrespondenz aus ihrer Sicht zu interpretieren sei. Aus alledem leitet sie ab, dass den Meldepflichten gemäss aArt. 697i ff. OR "Genüge getan" worden sei und C.C._ seine Stimmrechte befugterweise ausgeübt habe.
Die Sachverhaltsdarstellung der Beschwerdeführerin findet im angefochtenen Urteil keine Stütze. Sie unterbreitet dem Bundesgericht ohne Rücksicht auf die vorinstanzlich festgestellten Tatsachen und in frei gehaltenen Ausführungen ihr Verständnis der Geschehnisse, unterlässt es aber, mit hinreichender Begründung Willkür darzutun. Darauf ist nicht einzutreten (Erwägung 2). Abgesehen davon erachtete das Handelsgericht diese Vorbringen mit Grund als unerheblich, vertrat die Beschwerdeführerin vor Vorinstanz doch selbst die Auffassung, die gesetzlich vorgeschriebene Meldung erst anlässlich der Generalversammlung vom 19. April 2016 (mithin nicht schon im Jahr 2012) vorgenommen zu haben.
4.2. Sodann erhebt die Beschwerdeführerin eine Gehörsrüge, die sie wie folgt begründet:
"Dadurch, dass die Vorinstanz den Emailverkehr zwischen dem Ehepaar C._ und der Beschwerdegegnerin ignoriert bzw. falsch gewürdigt hat, verletzt sie das Rechtliche Gehör der Beschwerdeführerin [...]."
Damit kritisiert sie unter dem Vorwand der Gehörsverletzung die Beweiswürdigung der Vorinstanz, (auch hier) ohne aufzuzeigen, inwiefern diese offensichtlich unrichtig sein soll. Dies ist nicht statthaft.
4.3. Weiter moniert die Beschwerdeführerin eine unrichtige Auslegung von aArt. 697i und aArt. 697j OR. Diese Bestimmungen hätten gefordert, dass die Meldung des Erwerbs von Inhaberaktien und der wirtschaftlich berechtigten Person "an die Gesellschaft" erfolge. Gemeint sei "ein Organ der Gesellschaft", und zwar "egal welches". Die Meldung könne auch "durch eine vom Alleinaktionär einberufen[e] Universalversammlung entgegengenommen werden", ungeachtet des Umstands, ob Mitglieder des Verwaltungsrats an dieser Versammlung anwesend seien oder nicht. Indem C.C._ die Universalversammlung vom 19. April 2016 "einberufen" habe und dort seinen Pass, seine Adresse und seine Aktienzertifikate "präsentiert" habe, sei er seiner Meldepflicht nachgekommen, ohne dass weitere Formalitäten vonnöten gewesen wären. Er habe somit seine Stimmrechte an dieser Generalversammlung ausüben dürfen; "alles Andere wäre überspitzter Formalismus". Dass dem nicht so ist, hat das Handelsgericht unter Hinweis auf die Bestimmungen zur Meldepflicht des Aktionärs, die Botschaft vom 13. Dezember 2013 zum Bundesgesetz zur Umsetzung der 2012 revidierten Empfehlungen der Groupe d'action financière (BBl 2014 605 ff.) und die innergesellschaftliche Kompetenzordnung ausgeführt (Erwägung 2.3.4 S. 12). Die Rüge der Beschwerdeführerin ist unbegründet.
4.4. Schliesslich kritisiert die Beschwerdeführerin, der Beschwerdegegnerin fehle die Aktivlegitimation zur Erhebung der vorliegenden Klage auf Feststellung der Nichtigkeit des Generalversammlungsbeschlusses vom 19. April 2016. Als "betroffene, weil abgesetzte Verwaltungsrätin" sei sie lediglich zur Anfechtungsklage nach <ref-law> berechtigt, die sie mangels Fristwahrung indes verwirkt habe. Es stehe einzig den Aktionären zu, die Nichtigkeit nach <ref-law> geltend zu machen.
Dies ist nicht richtig. Auf die Nichtigkeit eines Generalversammlungsbeschlusses kann sich jedermann berufen (<ref-ruling> E. 3.3.4.2; <ref-ruling> E. 3.3.2; je mit Hinweisen), wobei für die Klage auf Feststellung der Nichtigkeit prozessual ein schutzwürdiges Interesse vorausgesetzt ist. Dabei greift in diesem Bereich ein weitgefasster Interessenbegriff und genügt - vorbehältlich des Rechtsmissbrauchsverbots - die Absicht, die Gesellschaftsinteressen wahrzunehmen (im Einzelnen: Urteil 4A_282/2020 vom 5. August 2020 E. 2.1 mit Hinweisen). Dieses Rechtsverständnis hat denn auch die Vorinstanz ihren Erwägungen in bundesrechtskonformer Weise zugrunde gelegt. Die Beschwerdeführerin zeigt keinen Rechtsverstoss auf.
5.
Die Beschwerde ist abzuweisen, soweit darauf eingetreten werden kann. Bei diesem Ausgang des Verfahrens wird die Beschwerdeführerin kosten- und entschädigungspflichtig (siehe Art. 66 Abs. 1 und Art. 68 Abs. 1 und 2 BGG). Die Parteientschädigung, die praxisgemäss in Abstimmung auf die erhobene Gerichtsgebühr, vorliegend Fr. 5'500.--, festzusetzen ist und damit Fr. 6'500.-- beträgt, ist aus der an die Bundesgerichtskasse geleisteten Sicherheit auszurichten.

Demnach erkennt das Bundesgericht:
1.
Die Beschwerde wird abgewiesen, soweit darauf einzutreten ist.
2.
Die Gerichtskosten von Fr. 5'500.-- werden der Beschwerdeführerin auferlegt.
3.
Die Beschwerdeführerin hat die Beschwerdegegnerin für das bundesgerichtliche Verfahren mit Fr. 6'500.-- zu entschädigen. Diese Entschädigung wird aus der an die Bundesgerichtskasse bezahlten Sicherheitsleistung ausgerichtet.
4.
Dieses Urteil wird den Parteien, dem Handelsgericht des Kantons Zürich und dem Handelsregisteramt des Kantons Zürich schriftlich mitgeteilt.
Lausanne, 28. März 2022
Im Namen der I. zivilrechtlichen Abteilung
des Schweizerischen Bundesgerichts
Die Präsidentin: Hohl
Der Gerichtsschreiber: Stähle