A UDF requires no knowledge of API code, so can be done by anyone (note there may be some setup required for NX to find the UDFs you define)
A UDO (patricularly a UDO "feature") requires API programming, but can have a richer range of behaviors.
Note NX 11 introduces a new (API only) way of defining custom features as well (but all I know about it is that it has been mentioned here in the community site)
Production: NX10.0.3.5 MP5 + patch/TC11.2
I'd rather be e-steemed than e-diseaseled