DHCP implementation had quite a low priority for me, as it is only a luxury feature for lazy users
It is not important, as you can use a fixed IP/DNS configuration.
Yes, but for not-so techy people, I guess this is a must. At the other hand, maybe not my mother will run SymbOS. Or use EP. Or EPNET

No, that's not necessary. You can read less bytes than received from the RX buffer, you will just update the buffer pointer then in the correct way. The only thing I wonder is, if you always have to read and skip even number of bytes from the buffer because of the 16bit issue.
16 bit is an issue, the specification says as something like "it is NOT allowed to access any other w5300 register than low byte of the FIFO if high byte is already accessed before" (that is, in indirect mode: IDM_DR1 must be accessed if IDM_DR0 has been accessed before, and you can't even set another register to be selected with IDM_AR before you complete a 16 bit access. It seems this strict access method is only for the FIFO registers, others can be accessed for only a "8 bit half" of the register and continue with another register then!). So you must read (or writes) even number of bytes, always. Thus. if app wants odd number of bytes, you still need to buffer (ie in your network daemon, whatever) at least one byte! Of course if it was last byte in RX buffer, you read two bytes from FIFO but ignore the other (and then not buffer).
Quoted from the specification (page 87):
"If the host system uses 8 bit data bus width, Sn_TX_FIFOR0 and Sn_TX_FIFOR1 should be accessed in a pair. When copying 1 byte data into internal TX memory, the host writes the 1 byte data in Sn_TX_FIFOR0 and dummy data in Sn_TX_FIFOR1. Sn_TX_FIFOR should be accessed with 2 byte size. Access the Sn_TX_FIFOR0 of low address register first, and the Sn_TX_FIFOR1 of high address register. After accessing Sn_TX_FIFOR0, it is not allowed to access other W5300 registers except for Sn_TX_FIFOR1."
Of course, it translates a bit different for indirect mode, since there it means writing IDM_AR to be able to use other register, and IDM_DR1 for the already selected Sn_TX_FIFOR1 for example. Thus, if IDM_AR is set for the Sn_TX_FIFOR and then you accessed for write IDM_DR0 then you _must_ and _can only_ access IDM_DR1 not any other register. As far as I can see. The same for the other direction (RX FIFO reg).
For the RX direction (page 88):
"If the host system uses 8 bit data bus width, Sn_RX_FIFOR0 and Sn_RX_FIFOR1 should be accessed in a pair as like Sn_TX_FIFOR. It is not allowed to access Sn_RX_FIFOR0 and Sn_RX_FIFOR1 right after accessing Sn_TX_FIFOR0 and Sn_TX_FIFOR1. Theseare cause for the incorrect read. In order to prevent this, after reading Sn_TX_FIFOR0 and Sn_TX_FIFOR1, the host reads any register such as Sn_MR and then access Sn_RX_FIFOR. When the host reads the received DATA packet in internal RX memory through Sn_RX_FIFORby 2 bytes, the low and high data in internal RX memory can be readthrough Sn_RX_FIFOR0 and Sn_RX_FIFOR1respectively. The host performs RECV command after processing the received DATA packet in internal RX memory. "
So about the same issue but for another direction. What seems to be odd for me, this RECV command ... If reading RX FIFO reg updates w5300 internal pointer stuff etc for the socket RX buffer, what exactly does. I had not so much time to try to analyze this part of the specification yet! Also for RX there seems to be more rules given by the spec, see what I've copied here above. Unfortunately I hadn't much time too much at the weekend, still I would need time to try to understand these. I guess ...