How to show Roman and Arabic page numbers correctly in the table of contents?

Yes you can and have to use this for the outline to know about it. However, you can combine this with your custom footer, where you can just display the counter with the currently set page numbering instead of hard-coding it to "I":

#set page(numbering: "I", footer: context {
  set text(size: 10pt)
  align(center, counter(page).display()) // Automatically uses page.numbering
})

/* Front matter with roman numbering */

#set page(numbering: "1")

/* Main content with arabic numbering */
2 Likes