@seasmith A workaround to use the path computation features of the fs package while preserving the URL would be to prepend the domain after performing the path computation. For example, something like the following:
library(fs)
options(domain = "https://<domain>.com")
add_domain <- function(path, domain = getOption("domain")) paste0(domain, path)
resolve_path <- function(base, ref) path_norm(path(base, ref))
p <- resolve_path("/first/second", "../file.ext")
p <- add_domain(p)
## [1] "https://<domain>.com/first/file.ext"