You have a point here , because this information is updated frequently and has no specific time for changes! And some of it can be changes right before or at the time of the invoicing/Billing!
You have mentioned example of such information e.g. Addresses , Contacts details , Preferred language ,loyalty or customer level .. I add also product description in different languages , comments and tags on each product in the invoice/bill etc.
All Billing Systems , Core Banking are not directly in access to such information!
It is the responsibility of the Invoicing Formatting system or Bill/Invoice Presentment to capture such information on the fly or on demand before o during Bill Cycle!!
And many of the Bill presentment system such as Lagrange Systems , OpenText , GMC , PitneyBowes are using different ways to access and update such information!!
The best scenario here is some of these data are frequently changing and has no specific time and the best way is to make it -operational wise- external files (CSV/XML) on secure file system , this way operators or even trusted users in business can do the changes easily and quickly e.g. product description in different languages , Comments , communication text messages and promotional ads which appeared on the bill or invoice etc.
However another type of information are based on logic and need other systems to access it e.g. CRM, loyalty, Customer help, Apps !
It is wisely stored in database tables which can be accessed by other systems and bill presentment as well.
So, in both ways Bill/Invoice presentment must capable to use both ways external CSV/XML tables and DB tables before or during Bill cycle/invoicing.