Another point is that all the data structures are protected by function so we can monitor changes and properly update the pieces that needs update (filter, rendering code, …) and only when truly required. If we were following the “all public fields” approach of usual JavaScript code, you will get JS dev scratching their head on why things are not working like it was supposed to.
To comment on your access pattern, if you followed the C++ guide explaining the various data structures (meshes[imagedata/polydata/…/dataset], pipeline[algorithm], rendering[renderwindow/renderer/actor/mapper]), you will notice that you could do:
const actor = vol3D[0];
const dataset = someActor.getMapper().getInputData();
console.log(dataset.getNumberOfPoints()); // That was probably what you were looking for
const dataArray = dataset.getPointData().getArray(0); // Usually we prefer getting the array by their name rather than index
console.log(dataArray.getName());
console.log(dataArray.getNumberOfTuples());
console.log(dataArray.getNumberOfComponents());
const typedArray = dataArray.getData(); // raw data array
console.log(typedArray.length)
Nobody is saying VTK is simple, but unfortunately there is a reason behind some of that complexity.