How is exchange rates maintained? e.g. I want to say 1USD = 12.43 ZAR or 1EUR = 1.08USD.?
All the currency rates are relatives. So you define which currency is the base and put a rate of 1 on it. Then you set the rate of all other currencies relative to this base currency.
This is defined in Currency Module — trytond_currency latest documentation
If I sell from a base currency of ZAR but 1 ZAR is 0.06728 USD then the rate of this is set on the USD currency
So what happen if I have 2 companies:
1 company in ZAR base currency
1 company in KES base currency
Both require conversion to USD? How will this be handled?
As I said the currency rates are relative. The company currency is not important. But you have to choose a base currency (and even you can use any fancy setup but it is simpler to choose one currency).