I've found a solution using the emacs package
mmm-mode. Most of the information I got was from this article.
What this package does, is allow multiple major modes in the same buffer. You basically set the opening and closing clauses for whatever nested syntax you have, and that block will be highlighted in a submode.
M-x package-install RET graphql-mode
M-x package-install RET mmm-mode
:front "[^a-zA-Z]gql`" ;; regex to find the opening tag
:back "`"))) ;; regex to find the closing tag
(mmm-add-mode-ext-class 'js-mode nil 'js-graphql)
(setq mmm-global-mode 'maybe)
;; Optional configuration that hides the background color for a highlighted block
;; I find it useful for debugging emacs, but when actually coding I dont want so much emphasis on submodes
(setq mmm-submode-decoration-level 0)
There are a lot of configuration options, but for this setup, you can re-highlight your blocks in an open buffer by running this command