I'd say that using closures and functions to create public apis with internal private structure does qualify it to have 'language constructs for public/private'.
It just took programmers collectively over 10 years to figure it out. I blame the 'new' keyword in JS, it feels completely grafted on after the fact.
Lua has been using this method of designing modular programs for years.