We've managed to drop a lot of redundant code across the whole DNF stack in the past years, but we have reached a point when it's nearly impossible to consolidate the code any further without breaking the API/ABI. Especially with PackageKit being dead[1], we can't move with the old "libhif" API in libdnf, because making any bigger changes to PackageKit is clearly out of scope.
[1] https://blogs.gnome.org/hughsie/2019/02/14/packagekit-is-dead-long-live-w...
*Ahem* See the comments on the above links an the github is still active https://github.com/hughsie/PackageKit
The main issue related to PackageKit linked libdnf was the lack of synchronization of the database. PackageKit was made to be cross-platform for distributions with minimum reliance on specific distribution command, Losing PackageKit would lead to yet another step back with multiple commands difficult to remember thus another fragmentation.