Your question is a topical issue.
So, I can suggest a next one solution.
As you know - we can represent our gt table as a LaTeX code: https://gt.rstudio.com/reference/as_latex.html
Returning to your example (!do it into console!):
library(gt)
library(tibble)
random <- tibble(
id = seq(1:50),
random = runif(50)
)
gt(random) %>%
as_latex() %>%
as.character()
Now we see our tab in next way (a lot of LaTeX code, which we should copy):
[1] "\\captionsetup[table]{labelformat=empty,skip=1pt}\n\\begin{longtable}{rr}\n\\toprule\nid & random \\\\ \n\\midrule\n1 & 0.83452294 \\\\ \n2 & 0.43130524 \\\\ \n3 & 0.38702311 \\\\ \n4 & 0.75589167 \\\\ \n5 & 0.34432672 \\\\ \n6 & 0.75283676 \\\\ \n7 & 0.72770533 \\\\ \n8 & 0.20232485 \\\\ \n9 & 0.07900835 \\\\ \n10 & 0.80229610 \\\\ \n11 & 0.03800323 \\\\ \n12 & 0.03144921 \\\\ \n13 & 0.87364981 \\\\ \n14 & 0.47587592 \\\\ \n15 & 0.56736249 \\\\ \n16 & 0.83990532 \\\\ \n17 & 0.64138659 \\\\ \n18 & 0.76073451 \\\\ \n19 & 0.66013426 \\\\ \n20 & 0.54178832 \\\\ \n21 & 0.70443849 \\\\ \n22 & 0.81238956 \\\\ \n23 & 0.11305811 \\\\ \n24 & 0.12530444 \\\\ \n25 & 0.22497031 \\\\ \n26 & 0.35093560 \\\\ \n27 & 0.91268645 \\\\ \n28 & 0.19127469 \\\\ \n29 & 0.21638115 \\\\ \n30 & 0.24333619 \\\\ \n31 & 0.21178737 \\\\ \n32 & 0.50896038 \\\\ \n33 & 0.30918302 \\\\ \n34 & 0.44719810 \\\\ \n35 & 0.20445296 \\\\ \n36 & 0.67448123 \\\\ \n37 & 0.78824962 \\\\ \n38 & 0.62888684 \\\\ \n39 & 0.39583956 \\\\ \n40 & 0.99218439 \\\\ \n41 & 0.27330819 \\\\ \n42 & 0.20861772 \\\\ \n43 & 0.67226113 \\\\ \n44 & 0.11676375 \\\\ \n45 & 0.24479000 \\\\ \n46 & 0.28968861 \\\\ \n47 & 0.72271636 \\\\ \n48 & 0.58395987 \\\\ \n49 & 0.74914347 \\\\ \n50 & 0.32712809 \\\\ \n\\bottomrule\n\\end{longtable}\n"
Nice. Now we can transfer to our qmd-file:
---
format:
pdf:
documentclass: article
keep-tex: true
include-in-header:
- \usepackage{amsmath, booktabs, caption, longtable}
---
```{r, results='asis', echo=F}
k <- "\\captionsetup[table]{labelformat=empty,skip=1pt}\n\\begin{longtable}{rr}\n\\toprule\nid & random \\\\ \n\\midrule\n1 & 0.83452294 \\\\ \n2 & 0.43130524 \\\\ \n3 & 0.38702311 \\\\ \n4 & 0.75589167 \\\\ \n5 & 0.34432672 \\\\ \n6 & 0.75283676 \\\\ \n7 & 0.72770533 \\\\ \n8 & 0.20232485 \\\\ \n9 & 0.07900835 \\\\ \n10 & 0.80229610 \\\\ \n11 & 0.03800323 \\\\ \n12 & 0.03144921 \\\\ \n13 & 0.87364981 \\\\ \n14 & 0.47587592 \\\\ \n15 & 0.56736249 \\\\ \n16 & 0.83990532 \\\\ \n17 & 0.64138659 \\\\ \n18 & 0.76073451 \\\\ \n19 & 0.66013426 \\\\ \n20 & 0.54178832 \\\\ \n21 & 0.70443849 \\\\ \n22 & 0.81238956 \\\\ \n23 & 0.11305811 \\\\ \n24 & 0.12530444 \\\\ \n25 & 0.22497031 \\\\ \n26 & 0.35093560 \\\\ \n27 & 0.91268645 \\\\ \n28 & 0.19127469 \\\\ \n29 & 0.21638115 \\\\ \n30 & 0.24333619 \\\\ \n31 & 0.21178737 \\\\ \n32 & 0.50896038 \\\\ \n33 & 0.30918302 \\\\ \n34 & 0.44719810 \\\\ \n35 & 0.20445296 \\\\ \n36 & 0.67448123 \\\\ \n37 & 0.78824962 \\\\ \n38 & 0.62888684 \\\\ \n39 & 0.39583956 \\\\ \n40 & 0.99218439 \\\\ \n41 & 0.27330819 \\\\ \n42 & 0.20861772 \\\\ \n43 & 0.67226113 \\\\ \n44 & 0.11676375 \\\\ \n45 & 0.24479000 \\\\ \n46 & 0.28968861 \\\\ \n47 & 0.72271636 \\\\ \n48 & 0.58395987 \\\\ \n49 & 0.74914347 \\\\ \n50 & 0.32712809 \\\\ \n\\bottomrule\n\\end{longtable}\n"
knitr::asis_output(k)
```
About asis_output look here
Output1:
We see that this break between 43 and 44.

Considering the place for the header - updating our code (adding \\toprule\nid & random \\\\ \n\\midrule between 42 and 43:
New code:
---
format:
pdf:
documentclass: article
keep-tex: true
include-in-header:
- \usepackage{amsmath, booktabs, caption, longtable}
---
```{r, results='asis', echo=F}
k <- "\\captionsetup[table]{labelformat=empty,skip=1pt}\n\\begin{longtable}{rr}\n\\toprule\nid & random \\\\ \n\\midrule\n1 & 0.83452294 \\\\ \n2 & 0.43130524 \\\\ \n3 & 0.38702311 \\\\ \n4 & 0.75589167 \\\\ \n5 & 0.34432672 \\\\ \n6 & 0.75283676 \\\\ \n7 & 0.72770533 \\\\ \n8 & 0.20232485 \\\\ \n9 & 0.07900835 \\\\ \n10 & 0.80229610 \\\\ \n11 & 0.03800323 \\\\ \n12 & 0.03144921 \\\\ \n13 & 0.87364981 \\\\ \n14 & 0.47587592 \\\\ \n15 & 0.56736249 \\\\ \n16 & 0.83990532 \\\\ \n17 & 0.64138659 \\\\ \n18 & 0.76073451 \\\\ \n19 & 0.66013426 \\\\ \n20 & 0.54178832 \\\\ \n21 & 0.70443849 \\\\ \n22 & 0.81238956 \\\\ \n23 & 0.11305811 \\\\ \n24 & 0.12530444 \\\\ \n25 & 0.22497031 \\\\ \n26 & 0.35093560 \\\\ \n27 & 0.91268645 \\\\ \n28 & 0.19127469 \\\\ \n29 & 0.21638115 \\\\ \n30 & 0.24333619 \\\\ \n31 & 0.21178737 \\\\ \n32 & 0.50896038 \\\\ \n33 & 0.30918302 \\\\ \n34 & 0.44719810 \\\\ \n35 & 0.20445296 \\\\ \n36 & 0.67448123 \\\\ \n37 & 0.78824962 \\\\ \n38 & 0.62888684 \\\\ \n39 & 0.39583956 \\\\ \n40 & 0.99218439 \\\\ \n41 & 0.27330819 \\\\ \n42 & 0.20861772 \\\\ \\toprule\nid & random \\\\ \n\\midrule \n43 & 0.67226113 \\\\ \n44 & 0.11676375 \\\\ \n45 & 0.24479000 \\\\ \n46 & 0.28968861 \\\\ \n47 & 0.72271636 \\\\ \n48 & 0.58395987 \\\\ \n49 & 0.74914347 \\\\ \n50 & 0.32712809 \\\\ \n\\bottomrule\n\\end{longtable}\n"
knitr::asis_output(k)
```
The desired output:

So, the main idea of this method: first render of qmd-file -> detect the break -> manually add the header.