I'm afraid, as soon as you run this line:
data$region=factor(data$region, levels=c(1,3,2 ), labels=c("a","Z+","koko")
the original values of region are lost forever, and the content of the levels= argument is forgotten.
But why don't you keep the original values in the data? You can always remove them just before saving:
data <- data.frame(region = c(1,2,3,2,3,1))
data %>%
mutate(region_fct = factor(data$region, levels=c(1,3,2 ), labels=c("a","Z+","koko"))) %>%
filter(region == 2) %>%
select(-region) %>%
rename(region = region_fct) %>%
write_csv("my_file.csv")
Another possibility: how do you chose the order in levels=c(1,3,2)? I imagine you're not making up this order. You could probably use the data that gave you this order as a look-up table.