There's two major factors preventing runtime package management on OpenWrt to be as complete as on other common platforms such as traditional Linux distributions:
a) lack of quality (or maybe, thoroughness, since I do not mean to discredit the voluntary work of the package and base system maintainers) in packaging, this means properly maintaining conflicts, replaces, provides, dependency annotations, carefully choosing compile time settings, tracking ABIs, updating libraries and subsystem in a coordinated manner - all that is not being done properly since the common perception of OpenWrt seems to be the one of a source-based distribution where features are resolved at compile-time and set in stone after that.
Runtime package management is an afterthought at best and the only actual supported and somewhat tested operation is installing additional things on top of the running system. Removals, upgrades, replaces etc. are supported by opkg itself (albeit often bugged) but not properly being catered for on a repository level (by ensuring coherency, coordinated upgrades, ABI tracking, prerm/postrm/preinst/postinst scripts etc.)
b) lack of a completely writable system, means we can't upgrade or replace certain components such as the kernel (stored differently on each target, out of pkg control, often not even writable from the booted system) or the libc (exempted from packaging due to insufficient ABI tracking). Furthermore the majority of targets only has a fraction of the overall flash space available as writable overlay space which is quickly exhausted.
A typical supported device does not have enough sufficient writable storage space to store a copy of each installed package (which would be the worst-case requirement for supporting complete system upgrades, kernel and libc update issues aside).
Some targets like x86 or capable ARM boards with plenty of flash space could theoretically support a better, more complete package management but since OpenWrt caters mostly to the lowest common denominator of all supported platforms, it has to follow the capability limits of low end targets. Even if there weren't the platform limitations, the current contributor base wouldn't (imho) be up to the task of properly maintaining binary repositories in a quality comparable to major Linux distributions for the several thousand packages as that would require a lot more scrutiny when dealing with packaging metadata. The build system wouldn't be up for the task either in its current form and require considerable development effort.
Regarding your question about conflicts: conflicts in OpenWrt packages are mostly between multiple providers of the same functionality, the vast majority of them being build variants. Means things like ip-full
vs. ip-tiny
or wpad-openssl
vs. wpad-mbedtls
. The differences among these variants cannot be moved to common packages in a meaningful manner (e.g. having ip-full
and ip-tiny
share a common hypothetical libip
would make no sense since libip
would need to contain all functionality required by ip-full
, rendering ip-tiny
useless) .
In my opinion, for targets that do have the capabilities (storage, mainly) to host "fat" distributions with proper package management, it might make sense to utilize things like Debian chroots to install additional software or to resort to container management to deploy additional userspace software. After all, OpenWrt is primarily meant to be a (source based) networking oriented distribution that happens to have kernel support for a lot of exotic hardware targets. Some people want the hardware support but not the network-oriented/limited userland, but rather a generic fully featured distribution but that isn't something OpenWrt can and wants to support in its current form.