there is no such thing as 'observer mode', unless its some 3rd-party mod-specific thing - but that has nothing what so ever to do with the protocol.
by sequences, I mean the sequence numbers in the packets. if you repeat the sequence number, the packet WILL be dropped.
if you're testing with fte as a server, use sv_port 26000 (to default it for nq instead of qw), sv_listen_nq 1 (so you don't have to implement svc_stuffcmd properly yet), showpackets 1 (so you can see the packets the server receives without needing to resort to wireshark), developer 1 (so you can see stale/dupe sequences), showdrop 1 (so you can see dropped sequences). if developer or showdrop result in any network-related prints then it means that the server is dropping packets for some reason, on a lan this is always a bad sign. I expect DP has some equivelent settings, but I can't help with those.
note that a timeout error only occurs if no valid messages arrived - it really doesn't matter what's in the message, nops, moves, reliable, unreliable, whatever. It just has to be valid and complete. individual fragments don't count, but *any* unreliable does, and any reassembled reliable does.
timing out thus proves that your packets are getting dropped by the server's network layer (ie: before the clc parsing layer), or they're simply not arriving at all (wrong address or dodgy NAT or firewall or something out of quake's control).
also, remember that the sequence value (bytes 4-7) is big endian, just as the flags+length value is.
vanilla nq has some annoying quirks about exactly when particular messages are allowed. send things at the wrong times and you can easily crash clients. be glad that you're writing a client and not a server.

also, clc_nop is 1. 0 is clc_bad, and should never be sent.
.