Creating a purely Dynamic metadata would not be possible. Since OData approach is like a "declarative meta model" - where you need to define before hand how the metadata would be.
Metadata related operations are always expensive, so Gateway caches the metadata for faster operations. A dynamic metadata [even if you manage some how !] would make things very slow, as every time the framework deals with a new metadata for the same service. You code will also become very dynamic / conditional and complex. So may be you can rethink on your approach.
I have never done it, for a try you may,
1. Disable the cache in the Gateway level (from SPRO setting) [ this will impact all other services as well, I believe ] -- things are expected to become slow !!!!
2. You can follow a code based approach , with conditions to render dynamic metadata every time it is called
3. Dynamic handling in the Data provider class
4. Dynamic UI to understand this Model
This would make things slow and complex.. but hopefully you would achieve something you want at a high cost.
Better approach would be To develop service with known fields and enhancing it when more fields are know. May be you can pass some information using the HTTP headers if needed.
Atanu