Faits :
A.
Par requête du 3 juillet 2015, le service du Registre du commerce du canton de Fribourg a dénoncé au Président du Tribunal civil de l'arrondissement de... (FR) des carences dans l'organisation de la société anonyme A._ SA. Le service expliquait que cette entité juridique ne disposait plus d'administrateur ni d'adresse de domiciliation et que les sommations légales étaient restées sans effet. Aussi invitait-il le juge à prendre les mesures nécessaires en application de l'<ref-law>.
Par sommation publiée dans la Feuille officielle du canton de Fribourg, le Président du Tribunal civil a imparti à la société un délai de 60 jours pour faire inscrire au Registre du commerce un administrateur domicilié en Suisse ainsi qu'une adresse à laquelle elle puisse être jointe à son siège. Il a averti qu'à défaut de réaction, il prononcerait la dissolution de la société et ordonnerait sa liquidation.
Le 17 septembre 2015, le Président a constaté que la situation n'avait pas été régularisée dans le délai fixé. En conséquence, il a prononcé la dissolution de la société le 17 septembre 2015 à 14 h 00 et a confié la liquidation des biens, selon les règles applicables à la faillite, à l'Office cantonal des faillites.
Cette décision a été publiée dans la Feuille officielle fribourgeoise du 25 septembre 2015.
B.
B.a. La décision de dissolution a été inscrite au Registre du commerce, qui a modifié la raison sociale en y ajoutant la mention "en liquidation". Ces éléments ont été publiés dans la Feuille officielle suisse du commerce (FOSC) du....
B.b. Le 26 octobre 2015, B._ a déposé un appel auprès du Tribunal cantonal fribourgeois. Déclarant agir en son nom propre et au nom de la société en liquidation, il concluait à ce que soit constatée la nullité de la décision de dissolution rendue le 17 septembre 2015. Il alléguait être l'actionnaire unique de la société et son administrateur depuis une assemblée générale du 9 octobre 2015.
Par arrêt du 3 février 2016, la I e Cour d'appel civil du Tribunal cantonal a déclaré l'appel irrecevable et mis les frais judiciaires à la charge de B._.
Les considérants de cette décision peuvent se résumer comme il suit: l'appel du 26 octobre 2015 était tardif; le délai de dix jours applicable en procédure sommaire (<ref-law>) avait commencé à courir le lendemain de la notification effectuée par publication le 25 septembre 2015, pour expirer le 5 octobre 2015. Le prénommé ne l'ignorait pas, mais soutenait qu'il pouvait agir en tout temps comme il se prévalait de la nullité de la décision. La recevabilité sous cet angle dépendait ainsi du constat ou non de la nullité de la décision attaquée. Cela étant, le prénommé n'avait jamais été inscrit au Registre du commerce en tant qu'administrateur; il ne pouvait dès lors agir au nom de la société. Certes, il fallait reconnaître à l'actionnaire la qualité pour recourir contre une mesure prise en application de l'<ref-law>, mais l'appelant n'établissait pas revêtir une telle qualité. Il n'avait produit aucune action ou certificat d'actions, ni aucune liste de la société permettant de le légitimer. Tout au plus avait-il fourni un procès-verbal d'assemblée générale dans lequel il était désigné comme actionnaire unique, mais ce document n'était pas signé. Il affirmait être devenu actionnaire unique à la suite d'une cession de C._ mais ne fournissait aucune preuve. D'après un courrier de l'Office des faillites du 12 octobre 2015, c'était C._ et non l'appelant qui figurait au compte-courant actionnaire de la société. En bref, l'appelant n'avait pas prouvé sa qualité d'actionnaire, et partant sa qualité pour recourir. Dans le cadre d'un appel, la fixation d'un délai pour réparer ce vice n'entrait pas en considération. Par conséquent, la sanction était l'irrecevabilité.
B.c. Le 24 février 2016, le Président du Tribunal civil de... (FR) a suspendu la procédure de faillite faute d'actif. Cette décision a fait l'objet d'une inscription au Registre du commerce, publiée dans la FOSC du....
C.
Le 7 mars 2016, B._, déclarant agir en son nom propre et au nom de A._ SA en liquidation, a saisi le Tribunal fédéral d'un "recours" concluant à ce que l'appel soit déclaré recevable et à ce que la cause soit renvoyée à l'autorité précédente pour qu'elle juge l'appel sur le fond. Le recours dénonce une violation de l'art. 29 al. 1 Cst. (interdiction du formalisme excessif) et des art. 132, 179 et 180 CPC.
La préposée au Registre du commerce a déposé des déterminations en précisant qu'elle s'en remettait à justice quant à la recevabilité du recours.

Considérant en droit :
1.
1.1. Le Tribunal fédéral statue sur la base de l'état de fait établi par l'autorité précédente (<ref-law>). Il peut toutefois le rectifier ou le compléter d'office aux conditions de l'<ref-law>. En l'occurrence, l'état de fait a été complété par des informations découlant du Registre du commerce, accessibles sur Internet, et partant notoires (cf. supra let. Ba et Bc; <ref-ruling> consid. 6.2 p. 564).
1.2.
1.2.1. Le recours en matière civile peut être formé notamment pour violation du droit fédéral (<ref-law>). L'autorité de céans applique le droit d'office (<ref-law>).
Dans le domaine en cause, la valeur litigieuse minimale pour former un recours en matière civile est de 30'000 fr.; sont déterminantes les conclusions prises devant l'autorité précédente (<ref-law> en lien avec l'<ref-law>). A défaut subsiste la voie du recours constitutionnel (<ref-law>), dans lequel le Tribunal fédéral examine uniquement la violation des droits constitutionnels (<ref-law>), pour autant que le justiciable ait expressément soulevé un tel grief et l'ait dûment explicité (<ref-law> en lien avec l'<ref-law>; <ref-ruling> consid. 2.2).
1.2.2. Le présent litige porte sur la décision de dissoudre une société anonyme en raison de carences dans son organisation, et d'ordonner sa liquidation selon les dispositions applicables à la faillite (<ref-law>). En pareil cas, la pratique tend à estimer la valeur litigieuse d'après le capital nominal de la société (arrêts 4A_630/2011 du 7 mars 2012 consid. 1, in Praxis 2012 p. 702; 4A_315/2010 du 19 août 2010 consid. 2; cf. aussi 4A_215/2015 du 2 octobre 2015 consid. 1.1; MARCEL SCHÖNBÄCHLER, Die Organisationsklage nach <ref-law>, 2013, p. 412 ss).
La décision attaquée ne comporte aucune estimation de la valeur litigieuse. La société en cause est une société anonyme dont le capital-actions nominal est de 100'000 fr., selon les indications figurant au Registre du commerce. Il apparaît toutefois que quatre mois après le dépôt de l'appel, cette entité juridique ne disposait plus d'actifs suffisants pour couvrir ne serait-ce que les frais de la procédure de liquidation (cf. supra let. Bc). Savoir si le seuil de 30'000 fr. est atteint dans une telle hypothèse prête à discussion. Cette question peut toutefois rester indécise, tout comme celle de l'intérêt à former un recours à ce stade; en effet, même si on admet que la voie du recours en matière civile est ouverte et que le Tribunal fédéral peut revoir librement l'application du droit fédéral, le recours doit de toute façon être rejeté sur le fond en tant qu'il est formé par le recourant B._ en son nom propre (sur la recevabilité du recours formé au nom de la société, cf. infra consid. 3.1).
2.
2.1. Il n'est pas contesté que l'appel déposé le 26 octobre 2015 est tardif (cf. supra let. Bb). Le recourant a plaidé qu'il pouvait saisir en tout temps l'autorité d'appel pour faire constater la nullité de la décision rendue par le juge de première instance. L'autorité d'appel paraît avoir implicitement admis sa compétence de constater l'éventuelle nullité de la décision de dissolution.
2.2.
Selon la jurisprudence, la nullité absolue d'une décision peut être invoquée en tout temps de vant toute autorité et doit être constatée d'office. Elle ne frappe que les décisions affectées des vices les plus graves, manifestes ou du moins facilement décelables; sa constatation ne doit pas mettre sérieusement en danger la sécurité du droit (<ref-ruling> consid. 3.1; <ref-ruling> consid. 3.1). Sauf dans les cas expressément prévus par la loi, il ne faut admettre la nullité qu'à titre exceptionnel, lorsque les circonstances sont telles que le système d'annulabilité n'offre manifestement pas la protection nécessaire (<ref-ruling> consid. 2.4).
Si la jurisprudence a coutume de dire que la nullité peut être constatée "par toute autorité", cela tient au fait qu'il existe une grande diversité de situations dans lesquelles une décision nulle peut influer sur la validité de décisions postérieures relevant d'autres autorités. On ne peut donc pas énoncer toutes les autorités qui, amenées à rendre une décision ultérieure (par exemple une décision d'exécution), pourront constater à titre préjudiciel que la décision initiale est affectée d'un tel vice (PIERRE MOOR, "La nullité doit être constatée en tout temps et par toute autorité", in Staats- und Verwaltungsrecht auf vier Ebenen: Festschrift für Tobias Jaag, 2012, p. 44, cité dans l'arrêt 6B_986/2015 du 23 août 2016 consid. 2.1).
La théorie de la nullité n'implique pas que n'importe quelle autorité soit compétente pour constater ce vice, au mépris des règles gouvernant sa saisine (MOOR, op. cit., p. 53 s.; cf. aussi MAX IMBODEN, Der nichtige Staatsakt, 1944, p. 53 let. B; ces spécialistes de droit administratif admettent toutefois des exceptions).
2.3. Dans le cas concret, le recourant a saisi l'autorité normalement compétente pour connaître d'un appel contre la décision de dissolution de la société. Toutefois, cette décision était entrée en force de chose jugée formelle vu l'expiration du délai pour faire appel. Les juges d'appel pouvaient ainsi tout au plus constater le caractère tardif de l'appel, sans entrer en matière sur le fond. Le recourant ne prétend pas avoir demandé une restitution du délai pour faire appel, et la lecture de son mémoire d'appel confirme qu'il ne saurait s'interpréter comme une telle demande de restitution. Il n'y a dès lors pas à examiner la question d'une compétence sous cet angle.
Pour le surplus, on ne discerne pas de circonstances exceptionnelles qui justifieraient de s'écarter des règles procédurales relatives aux délais de recours et à la compétence des autorités, alors que subsistaient des possibilités de faire constater la nullité dans le respect de ces règles. S'il est vrai qu'un jugement nul est dépourvu d'effets juridiques (cf. <ref-ruling> consid. 2.3; FRANÇOIS BOHNET, in Code de procédure civile commenté, 2011, n° 106 ad <ref-law>; SIMON ZINGG, in Berner Kommentar, 2012, n° 98 ad <ref-law>), cela n'implique pas que la compétence de l'autorité de recours pour revoir cette décision au fond soit illimitée dans le temps. Pour ce motif déjà, l'appel devait être déclaré irrecevable.
3.
3.1. Comme en appel, B._ a déclaré agir en son nom propre et au nom de la société en liquidation. L'autorité précédente a constaté que le prénommé n'avait jamais figuré au Registre du commerce en tant qu'administrateur et que de ce fait, il ne pouvait agir pour le compte de la société; en conséquence, elle a mis les frais judiciaires à la charge du seul prénommé.
Devant la cour de céans, B._ ne critique en aucune façon cette analyse, sur laquelle il n'y a donc pas à revenir (<ref-law>; <ref-ruling> consid. 2). En tant qu'il est interjeté au nom de la société, le recours est irrecevable.
3.2. En tant qu'il est formé par B._ en son nom propre, le recours est rejeté dans la mesure où il est recevable. Les frais judiciaires sont mis à la charge du prénommé (<ref-law>; cf. aussi <ref-law>). Aucuns dépens ne sont alloués au service du Registre du commerce (<ref-law>), qui n'a au demeurant pas recouru à l'assistance d'un avocat.

Par ces motifs, le Tribunal fédéral prononce :
1.
En tant qu'il est formé au nom de la société A._ SA en liquidation, le recours est irrecevable.
2.
En tant qu'il est interjeté par B._ en son nom propre, le recours est rejeté dans la mesure où il est recevable.
3.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de B._.
4.
Le présent arrêt est communiqué aux parties et à la I e Cour d'appel civil du Tribunal cantonal du canton de Fribourg.
Lausanne, le 25 novembre 2016
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente: Kiss
La Greffière: Monti