You don’t need to use make.names at all — you can assign the strings directly. This works perfectly fine in R. You just need to backtick-quote the names when you try to use them as R names (e.g. after the $ operator):
names(df) = unlist(df[1,])
df$`Some messy string to be used`