For an ISV vendor, if a vendor has multiple apps. Can the vendor apps share the same namespace or it should be distributed by different namespace. The apps should be able to communicate/access with each other. If a vendor has App1 and App2, vendor should be able to sell App1 and App2 individually. If a customer buys App1 and App2, App1 should be able to access App2. If a customer buys App2, he is all good. He need not access App1. How do we need to list in the AppExchange? Is it App1+App2, App1, App2? Or just App1 and App2 individually as they bot have same namespace?
In Salesforce (classic) an app is a set of tabs that can be switched to via the select list in the top right hand corner of the screen. So you can certainly include multiple apps in a single AppExchange managed package (using a single namespace and single AppExchange entry). Those apps can share code as well as objects without having to resort to using the global keyword.
However, if you want to use the License Management App (LMA) to control access, the managed package as a whole as the thing licensed. So if in one managed package you include multiple apps that you want to charge separately for, you will have to manage/enforce that licensing yourself.
If you create two managed packages then you can have two namespaces and two AppExchange entries and the LMA will handle the licensing. However for them to be independently installable/usable you will have to avoid all compile-time dependency between them, meaning you will need to use dynamic SOQL to access the objects of one from the other and will not be able to directly invoke code of one from the other.
PS Just noticed you have lightning-components as a tag on your question: other rules may apply for those.
An ISV can not create two different managed package applications with the same namespace. The namespace is determined by the packaging org, and each org only supports a single managed package.
The licensing is all taken care of by the LMA and the customer needs to have the relevant licences to use each of the packages.
Your code is a different story and App 1 will need to use the App 2 namespace when working with components from that app and vice versa.