It depends on what you consider "dynamic": If it's literally "on the fly": Yes, there are options to dynamically handle pages - this approach is quite complex. Way too complex for a simple answer on stackoverflow.
But not everything is lost: You might get away with building your own navigation portlet that determines how many (and which) of the child pages that you've statically created get displayed, based on criteria that you know.
When each of your companies (careful: Misleading term - Liferay uses "company" as the technical name for "portal instance") uses a different site, you can also use site templates, or page templates - including this custom navigation portlet.
Also you can always create pages and page hierarchies with Liferay's API. Thorsten Laux's comment already mentions LayoutLocalService
. For maintainability: it'll be easier if you use it statically when you create the pages, instead of dynamically when you have the data (there we are again: dynamic use is too complex for this answer).
If it's good enough to hide certain pages: Go with a custom navigation portlet instead of Liferay's own. Depending on the complexity that you're willing to end up with: You can either create your own portlet or utilize a WebContent structure and template to dynamically decide which pages to link and which not to link (which effectively will hide them).