https://forum.archive.openwrt.org/viewtopic.php?id=68148#p341659
odhcpd does much more than just ipv6 dhcp. In addition to dhcpv6 it provides all RA functionality -
accepts RAs (instead of default kernel built-in mechanism which is not used in openwrt),
can act as RA server and can do RA/NDP relaying (which is itself very specific function).
Its well integrated with openwrt's network management engine - netifd - and communicates with it directly via ubus interface. So, odhcpd is openwrt specific daemon written in C to meet all its specific needs. Initially devs wrote shell scripts for all the stuff and used well known commands and daemons but later they started to write native daemons because of increased stability and reliability.
Better question - why still dnsmasq used as dhcpv4 server. Odhcpd contain dhcpv4 code. May be because dnsmasq is more configurable and for older versions compatibility. Odhcpd is good thing for most uses but there're scenarios where its not enough flexible and radvd have to be used.