How can I change page elements (menu, blocks, etc) based on a chosen 'audience' link?
Explaining the whole process would be bit complicated 

i ll provide you some steps try to follow that. 

In our project the same structure you have mentioned is used we have global pages like mysite.com/products and some further branch level pages like mysite.com/chennai/products  

Step one: create a view page in views. 

Step two: create a taxonomy term reference for the audience.

step three: create a block and in contextual filter add taxonomy term as contextual filter and in provide default value give get taxonomy term by url. 

step four: for every content you create it should have the term reference field.

step five: when you pass the audience name in the url it should display the content related to the taxonomy term. 

step six: like wise you have to configure the block in all the pages 

step seven: in block settings give display only in that particular  page

now what this will do is for every block it will be displayed their content based on the url if you change the url to audience two it will show the content having the taxonomy term as audience two as their value. 

hope this will give you a start up for the task :p