We can use factor to change the order in a custom way
df %>%
arrange(factor(Reg, levels = LETTERS[c(3, 1, 2)]), desc(Res), desc(Pop))
# Reg Res Pop
#1 C Urban 501638
#2 C Rural 499274
#3 A Urban 500414
#4 A Rural 500501
#5 B Urban 499922
#6 B Rural 500016
Or with match to get the index and arrange on it
df %>%
arrange(match(Reg, c("C", "A", "B")), desc(Res), desc(Pop))
If we have multiple columns to arrange in descending order
df %>%
arrange_at(2:3, desc) %>%
arrange(match(Reg, c("C", "A", "B")))