as Linux user I would expect that the ifupdown routine works for any interface and not just virtual interfaces - why to curtail such common routine and being inconsistent by providing it for virtual interfaces but not hardware interfaces?
ip does not take into account any (changed) interface settings specified in /etc/config/network
The ifdown and ifup commands in OpenWrt refer to logical interfaces as defined in /etc/config/network. They might or might not cause the shutdown of the underlying Linux network device. This is by design. An ifdown eth0 never was a valid use of OpenWrt's ifdown command (unless there happens to be a config interface eth0 in /etc/config/network).
If you want to alter the hardware state beneath netifd, using commands such ip or ifconfig are the way to go.
OpenWrt netifd operates on logical interfaces such as lan, wan etc. which relate to one or more network devices. Neither ifup/ifdown nor the uci configuration directly operate on Linux netdevs such as eth0, br-lan etc.
OpenWrt's ifupdown routine happens to have the same name as ifup and ifdown on other distros, apart from that it neither shares the semantics, nor the design goals of these tools.
No it does not. An ubus call network reload should be enough to apply all updated settings, leaving unchanged things alone.
As explained above, ifup and ifdown solely operate on logical interfaces declared in config interface sections, such as wan, lan, loopback. To apply any other changes in the network config (such as config rule, config route, config device etc.) use ubus call network reload.