Currently, Row and RowSet are classes exposed to the user. Ideally, we would want to expose interfaces and not implementations.
Benefits of exposing interfaces are:
Allow further testability of user code / decoupling.
Ability to hide implementation details (ie: class inheritance).
Support different implementations of the same interface.
The major disadvantage is that its breaking change that can be somehow painful for the user (even though, migrating efforts from the user just involves changing names 1-1).
A little history: C# driver introduced this functionality as classes instead of interfaces in version 1 (circa 2013), while the java driver used interfaces for ResultSet and Row. From 2.0 onwards, breaking changes on the C# driver were avoided whenever possible to limit the impact of maintaining multiple active branches, so we sticked with this misfeature. We made those classes "mockable" (default constructors and some virtual properties instead).