You cannot have no Metadata Adapter. If anything, you can configure the sample Metadata Adapter provided by Lightstreamer (namely the LiteralBasedProvider) and do without authentication and authorization.
In this case, you could rather subclass the LiteralBasedProvider and only handle notifyUserMessage and communicate to the Data Adapter in some custom way to forward the messages.
Setting up this communication may not be easy if the Metadata Adapter is a Java in-process one and the Data Adapter is a remote one based on the Generic Adapters SDK.

Another possibility is that you extend the remote Data Adapter based on the Generic Adapters SDK to also act as a remote Metadata Adapter (and configure adapters.xml accordingly).
In practice, the remote process should open one more connection and, on that, it should obey the ARI protocol for the Metadata Adapter part.
This can be complex, because, on this connection, you will receive many different requests and, even to provide simple answers, you have to handle the syntax.

It would be easier if you could leverage one of the other Remote Adapter SDKs, which take care of the communication protocol and require you to provide a Remote Data or Metadata Adapter object based on a simpler interface, similar to the Java in-process SDK interface.
Then you can have the same process run both the Remote Metadata Adapter and the Remote Data Adapter and have the two objects communicate easily.
We provide a few example of this kind. For instance, the chat adapter for nodejs and the portfolio adapter for C# .net.
In both cases, the Metadata Adapter receives information through notifyUserMessage and shares it with the Data Adapter, which is just a sibling object in the process.

Note that you can have LS Server handle the backpressure for notifyUserMessage also for Remote Metadata Adapters.
In fact, in adapters.xml you can configure the <messages_pool> block; see the inline comment in the adapters.xml template.