Yes that's how it works. It's arbitrary argument (I think blizz call it "param" or something), you can pass anything that fits, and then use that value in callback. You can use it to say find first n object(s) that match some criteria by implementing that logic in your callback.
Code:
Function : static, [000B0D30][0001:000AFD30], len = 00000085, int __fastcall ClntObjMgrEnumVisibleObjects(int (__fastcall*)(unsigned __int64,void *),void *)
Function attribute:
Function info:
FuncDebugStart : static, [000B0D39][0001:000AFD39]
FuncDebugEnd : static, [000B0DB1][0001:000AFDB1]
Data : enregistered ecx, Param, Type: function *, handler
Data : enregistered edx, Param, Type: void *, param
Data : VFrame Relative, [FFFFFFFC], Local, Type: int, success
This is from pdb dump of ancient wow alpha build. As you can see first argument named "handler" is function pointer, and second one named "param" has a type of "void *".