うーん。やっぱりoptvalがちゃんと渡ってないんじゃ。
optvalの宣言をLongにしてこうしたらどうだろ。

Declare Function setsockopt Lib "winsock.dll" (ByVal s As Long, ByVal level As Long, ByVal optname As Long, ByVal optval As Long, ByVal optlen As Long) As Long

lSockOpt = 1
lResult = setsockopt(lSock, IPPROTO_TCP, TCP_NODELAY, VarPtr(lSockOpt), 4)

Cで書ければいんだけど。これで駄目なら┐(´ー`)┌