I feel it's all correct but perhaps I would add some small bits:
"The frontend user API classes are however just wrapper / container (as indicated by their inheritance from *ImplContainer*), meaning they just reference specific back-end implementations (e.g. HDF5) that do the actual work for all frontend methods (by which they get called).
Thus, for each front facing API entity like *Block* an implementation specific entity like *BlockHDF5* exists, that implements the same interface (*IBlock*) as *Block* for the respective backend. Other then the frontend API classes that inherit ImplContainer & currently also the interface (e.g. *IBlock*) these specific implementations inherit only along the interface branch.