I'm one of the developers of Lens, and I agree that it's not the right fit for every problem. The way I categorize the different types of interfaces in my mind is a spectrum from:
* "shelf based" drag & drop like Lens, Tableau and most spreadsheets
* Query-based, where you type a query using SQL or another grammar and choose from a template
* High level code like ggplot, Vega or Observable's new Plot
* Low level code like D3
Since you're a developer, maybe you'd benefit from looking at one of the high level visualization grammars.
* "shelf based" drag & drop like Lens, Tableau and most spreadsheets
* Query-based, where you type a query using SQL or another grammar and choose from a template
* High level code like ggplot, Vega or Observable's new Plot
* Low level code like D3
Since you're a developer, maybe you'd benefit from looking at one of the high level visualization grammars.