Hola enecumene
Definitivamente la solucion que planteas al final es la correcta: Se crea e inicializa el registro TFormatSettings y luego se lo envia como parametro a las funciones FormatXXX, CurrToStr, etc
De esta manera no le modificas la config regional en el dispositivo/pc y tu aplicacion muestra la informacion con el formato mas adecuado. Lo unico que falta es que por modificar estos parametros se rompa tu aplicacion en algun otro punto o que luego otra aplicacion del usuario se comporte de manera inesperada
A veces quizas puede resultar tedioso el tener que crear e inicializar el registro y pasarlo a la funcion de formateo en cuestion, pero eso se puede solucionar con una unidad que tenga una funcion que se encarge justamente de eso. Tambien podria ver viable el tener inicializados uno o mas registros TFormatSettings con los cuales poder trabjar, por ejemplo
TMonedaFormat, TDateFormat, TDateTimeFormat..etc
Saludos!