I don't know how to do this but I can tell you why it happens.
If you use a getPage method like this you can observe what's going on.
<ui:include is using the first phase of
JSF lifecycle to get value of #{bean.page}. So if you click commandButton it gets old value even before action method changePage is called. That's why it's always one click late. Seems like there is no way to do this with ui:include. Doesn't matter if you use Ajax or Primefaces, it's JSF thing.