Faits :
A.
Le 21 mai 2014, X._, ressortissant kosovar né en 1978 et dont la demande d'asile en Suisse a été rejetée en 1999, a déposé une demande d'autorisation de séjour et de travail pour cas de rigueur auprès de l'Office cantonal de la population et des migrations du canton de Genève (ci-après: l'Office cantonal). Au cours de la procédure, il a expliqué qu'il résidait à Genève depuis 1998, qu'il avait toujours travaillé, qu'il était financièrement indépendant, qu'il ne faisait l'objet d'aucune poursuite et n'avait jamais émargé à l'aide sociale, qu'il parlait le français et était parfaitement intégré en Suisse. Par décision du 21 mars 2016, l'Office cantonal a refusé l'autorisation sollicitée. X._ a formé contre cette décision un recours auprès du Tribunal administratif de première instance de la République et canton de Genève (ci-après: le Tribunal administratif de première instance), qui l'a rejeté par jugement du 24 novembre 2016. Ce jugement a été confirmé sur recours de l'intéressé par arrêt du 27 juin 2017 par la Chambre administrative de la Cour de justice de la République et canton de Genève (ci-après: la Cour de justice).
X._ est le parent, avec A._, ressortissante kosovare, de deux enfants, l'un né en 2007 au Kosovo et l'autre né le 20 juillet 2017 à Genève.
B.
Le 5 décembre 2017, X._ a déposé une demande de reconsidération de la décision de refus d'autorisation de séjour du 21 mars 2016, sur laquelle l'Office cantonal a refusé d'entrer en matière par décision du 25 janvier 2018. Par jugement du 13 avril 2018, le Tribunal administratif de première instance a rejeté le recours de X._ contre cette décision.
Le 16 mai 2018, X._ a formé un recours contre ce jugement auprès de la Cour de justice.
Le 8 juin 2018, l'Office cantonal a conclu au rejet du recours.
Par courrier daté du 15 juin 2018, la Cour de justice a transmis au conseil de X._ une copie des observations de l'Office cantonal du 8 juin 2018 et lui a imparti un délai au 16 juillet 2018 pour formuler d'éventuelles observations (cf. <ref-law>).
Le 18 juin 2018, X._ a adressé à la Cour de justice un courrier accompagné d'une pièce complémentaire.
Le 25 juin 2018, la Cour de justice a transmis à l'Office cantonal une copie du courrier de X._ et de la pièce y afférente et a informé les parties que la cause était gardée à juger au fond.
Par arrêt du 10 juillet 2018, elle a rejeté le recours de X._ dans la mesure de sa recevabilité.
C.
Contre l'arrêt du 10 juillet 2018, X._ forme un recours constitutionnel subsidiaire au Tribunal fédéral. Il conclut, sous suite de dépens, à l'annulation de l'arrêt entrepris et à ce qu'il soit renoncé à la perception de frais de procédure. Il sollicite, à titre préalable, l'effet suspensif. Il se plaint essentiellement de la violation de son droit d'être entendu garanti par l'art. 29 Cst. et du principe de la bonne foi découlant de l'art. 9 Cst.
Par ordonnance du 20 septembre 2018, le Président de la II e Cour de droit public du Tribunal fédéral a accordé l'effet suspensif au recours.
L'Office cantonal expose ne pas avoir d'observations à formuler sur le recours. La Cour de justice s'en rapporte à justice quant à la recevabilité du recours et persiste dans les considérants et le dispositif de son arrêt. X._ a répliqué, en maintenant ses conclusions.

Considérant en droit :
1.
1.1. Le présent litige porte, au fond, sur le refus d'entrer en matière sur une requête de réexamen d'une décision relative au rejet d'une demande d'autorisation de séjour fondée sur l'art. 30 al. 1 let. b LEtr (RS 142.20). En vertu de l'art. 83 let. c ch. 5 LTF, le recours en matière de droit public est irrecevable contre les décisions en matière de droit des étrangers qui concernent les dérogations aux conditions d'admission. Cette disposition exclut du champ du recours en matière de droit public l'art. 30 al. 1 let. b LEtr (cf. arrêts 2D_11/2018 du 12 juin 2018 consid. 1.1; 2C_689/2017 du 1er février 2018 consid. 1.2.1; 2C_1115/2015 du 20 juillet 2016 consid. 1.3.4). C'est partant à juste titre que le recourant a formé un recours constitutionnel subsidiaire (<ref-law>).
1.2. A qualité pour former un tel recours quiconque a pris part à la procédure devant l'autorité précédente ou a été privé de le faire (<ref-law>) et a un intérêt juridique à l'annulation ou à la modification de la décision attaquée (<ref-law>). La jurisprudence a précisé que le recourant qui, comme en l'espèce, ne dispose pas d'un droit d'obtenir une autorisation de séjour en lien avec la disposition litigieuse sur le fond (soit l'art. 30 al. 1 let. b LEtr), n'est pas légitimé, sous l'angle de l'<ref-law>, à remettre en cause, par la voie du recours constitutionnel subsidiaire, le refus de lui octroyer une telle autorisation (cf. <ref-ruling> consid. 6.1 p. 197 s.; arrêt 2C_871/2010 du 7 avril 2011 consid. 1.4). Il ne peut faire valoir que la violation de droits de partie qui équivalent à un déni de justice formel, pour autant que, par ce biais, il n'invoque pas, même indirectement, des moyens ne pouvant être séparés du fond (<ref-ruling> consid. 6.2 p. 198 s.; arrêts 2C_871/2010 du 7 avril 2011 consid. 1.4; 2C_345/2009 du 22 octobre 2009 consid. 3.2).
En l'occurrence, le recourant, destinataire de l'arrêt attaqué, se plaint d'une violation de son droit à la réplique. Son grief a partant uniquement trait à ses droits de partie à la procédure cantonale; il est donc recevable au titre du recours constitutionnel subsidiaire nonobstant l'absence de qualité du recourant pour agir sur le fond (cf. <ref-ruling> consid. 1.4 p. 222; arrêt 2C_871/2010 du 7 avril 2011 consid. 1.4).
1.3. Le recourant s'est limité à une conclusion en annulation, ce qui n'est en principe pas admissible, le Tribunal fédéral ayant un pouvoir de réforme (cf. art. 117 et 107 al. 2 LTF; cf. <ref-ruling> consid. 1.2 p. 135; <ref-ruling> consid. 1.3 p. 383). A titre exceptionnel, il est toutefois admis que la partie recourante puisse prendre des conclusions cassatoires lorsque le Tribunal fédéral, s'il accueillait le recours, ne serait pas en mesure de statuer lui-même sur le fond (cf. <ref-ruling> consid. 1.2 p. 135 s.; <ref-ruling> consid. 1.3 p. 383). Tel est le cas en l'espèce, dès lors que le recourant invoque une violation de son droit à la réplique qui, si elle devait être reconnue, conduirait en principe - une réparation du vice étant réservée - à l'annulation de l'arrêt entrepris et au renvoi de la cause à l'instance cantonale (cf. <ref-ruling> consid. 2.8.1 p. 226; arrêt 4A_232/2018 du 23 mai 2018 consid. 6).
1.4. Pour le surplus, le recours est dirigé contre une décision finale (art. 117 et 90 LTF) rendue en dernière instance cantonale par une autorité judiciaire supérieure (art. 114 et 86 al. 1 let. d et al. 2 LTF). Il a été déposé en temps utile compte tenu des féries (art. 46 al. 1 let. b, art. 117 et 100 al. 1 LTF) et dans les formes requises (<ref-law>). Il convient donc d'entrer en matière.
2.
2.1. Le recours constitutionnel subsidiaire peut être formé pour violation des droits constitutionnels (<ref-law>). Le Tribunal fédéral n'examine toutefois la violation des droits fondamentaux que si ce grief a été invoqué et motivé par le recourant (art. 117 et 106 al. 2 LTF). Par ailleurs, le Tribunal fédéral conduit son raisonnement juridique sur la base des faits établis par l'autorité précédente (<ref-law>). Il ne peut s'en écarter que si les faits ont été retenus en violation d'un droit constitutionnel (art. 118 al. 2 et 116 LTF), ce que le recourant doit invoquer avec précision (art. 117 et 106 al. 2 LTF; cf. arrêt 2C_759/2017 du 16 mai 2018 consid. 2). Aucun fait nouveau ni preuve nouvelle ne peut être présenté à moins de résulter de la décision de l'autorité précédente (art. 117 et 99 al. 1 LTF).
2.2. En l'occurrence, le recourant commence son mémoire par une longue description des faits (p. 2 à 14 du recours), sans pour autant contester ceux retenus par la Cour de justice, dont il n'y a partant pas lieu de s'écarter.
Par ailleurs, le recourant a déposé un imposant chargé de pièces (98 documents) comprenant pour l'essentiel les mêmes que celles produites devant la Cour de justice, qui figurent donc déjà au dossier, ou des pièces tombant sous le coup de l'<ref-law> (copie d'un contrat de travail du 31 août 2018 [pièce 32], copie d'un rapport médical établi par le Docteur B._ en date du 2 juillet 2018 [pièce 45], copie de la décision de l'Office cantonal statuant sur la demande d'autorisation de séjour de la compagne du recourant et des enfants, datée du 28 août 2018 [pièce 46]). En définitive, les seules pièces nouvelles recevables sont celles qui se rapportent au grief du recourant tiré de la violation du droit à la réplique (réplique du recourant datée du 16 juillet 2018, attestation de réception par la Cour de justice de ce document et preuve de l'expédition le 18 juillet 2018 de l'arrêt du 10 juillet 2018 [pièces 96 à 98]). En effet, s'agissant d'un vice de procédure qu'il ne pouvait invoquer avant que ne soit rendue la décision attaquée, le recourant peut alléguer et prouver des faits nouveaux en relation avec ce grief, en dérogation à la règle de l'<ref-law> (cf. arrêt 2C_560/2012 du 21 janvier 2013 consid. 4.2).
3.
Le recourant se plaint d'une violation de son droit d'être entendu (art. 29 al. 1 et 2 Cst.), sous l'angle du droit à la réplique. Il reproche à la Cour de justice d'avoir rendu son arrêt le 10 juillet 2018, soit avant la fin du délai de réplique au 16 juillet 2018 qu'elle avait elle-même fixé, et partant sans prendre en compte les observations qu'il a transmises le dernier jour du délai. Le recourant dénonce également une violation du principe de la bonne foi (art. 5 al. 1 et 9 Cst.).
3.1. Compris comme l'un des aspects de la notion générale de procès équitable au sens de l'art. 29 Cst., le droit d'être entendu garantit notamment au justiciable le droit de s'expliquer avant qu'une décision ne soit prise à son détriment, d'avoir accès au dossier, de prendre connaissance de toute argumentation présentée au tribunal et de se déterminer à son propos, dans la mesure où il l'estime nécessaire, que celle-ci contienne ou non de nouveaux éléments de fait ou de droit, et qu'elle soit ou non concrètement susceptible d'influer sur le jugement à rendre (<ref-ruling> consid. 4.1.1 p. 52 s. et les arrêts cités). Il appartient en effet aux parties, et non au juge, de décider si une prise de position ou une pièce nouvellement versée au dossier contient des éléments déterminants qui appellent des observations de leur part. Toute prise de position ou pièce nouvelle versée au dossier doit dès lors être communiquée aux parties pour leur permettre de décider si elles veulent ou non faire usage de leur faculté de se déterminer (cf. <ref-ruling> consid. 3.2 p. 192; <ref-ruling> consid. 2.1 p. 485 s.; <ref-ruling> consid. 2.3.1 p. 197). Le juge peut fixer aux parties un délai pour ce faire, bien qu'il n'en ait pas l'obligation au stade de la réplique lorsque la partie est représentée par un avocat (cf. <ref-ruling> consid. 4.1.1 p. 53 s.; arrêt 2C_560/2012 du 21 janvier 2013 consid. 4.4). Si le juge impartit un délai aux parties pour se déterminer sur une pièce, il se doit de le respecter et le principe de la bonne foi (art. 5 al. 3 Cst.), qui impose notamment aux autorités comme aux particuliers de s'abstenir, dans les relations de droit public, de tout comportement contradictoire ou abusif (cf. <ref-ruling> consid. 5.2 p. 561), commande qu'il ne statue pas en leur défaveur avant son échéance.
3.2. En l'occurrence, il résulte du dossier et il n'est pas contesté que la Cour de justice a transmis au recourant, conformément aux garanties rappelées ci-avant, les observations de l'Office cantonal du 8 juin 2018 par courrier du 15 juin 2018. Dans ce courrier, la Cour de justice a imparti au recourant un délai jusqu'au 16 juillet 2018 pour former d'éventuelles observations. La Cour de justice ne pouvait donc pas rendre son arrêt du 10 juillet 2018, rejetant le recours, avant l'échéance fixée, ainsi que le relève le recourant.
3.3. La Cour de justice souligne dans ses déterminations qu'en date du 25 juin 2018, elle a transmis à l'Office cantonal le dernier courrier du recourant (daté du 18 juin 2018) et a informé à cette occasion les parties que la cause était gardée à juger.
En procédure genevoise, cette expression signifie que la Cour de justice considérait que l'instruction était close (cf. arrêt 2D_50/2012 du 1er avril 2013 consid. 3.2). Le recourant devait donc comprendre à la lecture du courrier du 25 juin 2018 que l'envoi de nouvelles pièces était inutile. Il ne pouvait en revanche pas en déduire, comme semblent le laisser entendre les juges précédents, que le délai fixé par la Cour de justice elle-même dix jours auparavant était caduc.
3.4. La Cour de justice semble en outre considérer que le courrier du 18 juin 2018 du recourant constituait sa réplique et reproche à l'intéressé de ne pas avoir annoncé à cette occasion l'envoi d'une écriture ultérieure.
Ainsi que le relève le recourant, le courrier de la Cour du vendredi 15 juin 2018 transmettant les observations de l'Office cantonal et fixant le délai de réplique n'a pas pu lui parvenir avant le lundi 18 juin 2018. La position de la Cour de justice selon laquelle le courrier expédié le même jour valait réplique n'est partant pas convaincante, d'autant que ce courrier annonce seulement le dépôt d'une pièce complémentaire et ne contient pas de références aux observations de l'Office cantonal. En outre, le fait, non contesté par la Cour de justice, que le recourant a expédié le 16 juillet 2018, soit dans le délai imparti, des observations détaillées, qui prennent explicitement position sur celles de l'Office cantonal du 8 juin 2018, dément l'interprétation de la Cour de justice. Celle-ci ne peut donc être suivie lorsqu'elle conclut à l'absence de violation des droits procéduraux du recourant au motif que celui-ci avait déjà exercé son droit à la réplique lorsque la cause a été gardée à juger.
3.5. En conclusion, le grief tiré de la violation du droit d'être entendu est fondé. L'irrégularité dénoncée ne peut pas être réparée devant le Tribunal fédéral (cf. ATF <ref-ruling> consid. 2.7 p. 199; arrêt 2C_862/2016 du 4 novembre 2016 consid. 4.6). Le recours doit donc être admis, la décision attaquée annulée et la cause renvoyée à l'autorité précédente pour nouvelle décision après avoir tenu compte des observations du recourant du 16 juillet 2018.
4.
Au vu de l'issue du litige, il n'est pas perçu de frais judiciaires (art. 66 al. 1 et 4 LTF). En tant que la conclusion du recourant tendant à ce qu'il soit renoncé à la perception de frais de procédure devrait être interprétée comme une requête d'assistance judiciaire partielle, elle devient donc sans objet.
Le recourant, qui obtient gain de cause avec l'aide d'un mandataire professionnel, a droit à une indemnité de partie, à charge de la République et canton de Genève (art. 68 al. 1 et 2 LTF). Le montant des dépens est fixé en tenant compte du fait que le recours est admis pour un motif formel (cf. arrêt 2C_983/2016 du 20 février 2017 consid. 3 et les arrêts cités).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est admis. L'arrêt du 10 juillet 2018 de la Cour de justice est annulé et la cause est renvoyée à cette autorité pour nouvelle décision dans le sens des considérants.
2.
Il n'est pas perçu de frais judiciaires.
3.
La République et canton de Genève versera au recourant la somme de 1'500 fr. à titre de dépens pour la procédure devant le Tribunal fédéral.
4.
Le présent arrêt est communiqué au mandataire du recourant, à l'Office cantonal de la population et des migrations, ainsi qu'à la Cour de justice de la République et canton de Genève, Chambre administrative, 1ère section.
Lausanne, le 18 décembre 2018
Au nom de la IIe Cour de droit public
du Tribunal fédéral suisse
Le Président : Seiler
La Greffière : Kleber