Hi, welcome to the community! Thanks for your question, it was really interesting to think through. I created some pared down sample data that may be similar to yours, but I can't test it fully without a sample of your actual data. Please let me know if this fits your needs! 
library(tidyverse)
set.seed(4707)
t <- tibble(
c1 = 1:3,
c2 = 4:6,
c3 = 7:9
)
t_list <- map(set_names(1:nrow(t)), ~sample(unlist(t[.x,])))
set_names(map_dfr(t_list, ~as_tibble_row(.x)), names(t))
#> # A tibble: 3 x 3
#> c1 c2 c3
#> <int> <int> <int>
#> 1 1 7 4
#> 2 2 8 5
#> 3 3 9 6
Created on 2021-06-18 by the reprex package (v2.0.0)