With more experimentation, I could get *53 KBytes/sec* on ethernet using ENC28J60 card. It all has to do with experimenting with already provided configurations for IP. (This is for UIP Ethernet stack.)
There are three configurations: UIP_CONF_BUFFER_SIZE, UIP_CONF_TCP_MSS, UIP_CONF_RECEIVE_WINDOW. All these are set in ./utility/uip-conf.h. In distribution, some of these values are already set, and I got only 7-8KBytes/sec. When I simply commented all these values, the defaults are set in ./utility/uip-opt.h. Only UIP_BUFSIZE is set to 400, and others are set from this value. With this really default configuration, I could get more than 50KBytes/sec.
And seeing the tcpdump, this time, it was perfect - with no duplications, or any opportunity to tune further. Neverthles, UDP performance was almost 80-90KBytes/sec, so perhaps we should try further.
Attaching the file with which I measured the bandwidth.