Issue: My device has 16MB of flash, but after OpenWrt installation I have only 3…4MB of free flash available for package installation.
Root cause: Dual-boot / Dual-partition / Dual-image / Dual-firmware device, i.e. you have 2x 8MB for two separate firmwares, one of which is used for when you can not boot the other.
Solution tl;dr : It's not easy for an end user. You need to ask a developer to fix this, or learn how to do it yourself and contribute the change (see below).
Solution more in-depth : This device must be altered to use both partitions in the OpenWrt buildsystem.
It usually involves modifying the dtb file that states what firmware “partitions” the device has, and finding a way to deal with the bootloader's handling of dual-partition firmware (i.e. the fact that it will boot the second kernel if it cannot boot the first), so you will probably need to leave both kernel partitions with the same kernel, and this means modifying the scripts that handle the firmware upgrade on this target/device.
OpenWrt has custom drivers to “join” two different partitions into a bigger one even if they are not physically contiguous, like mtd-concat. See the link below to the github commit of mtd-concat for more info on how to use it.