CGPoint and NSPoint are the same struct. It doesn't matter if they got a different name, they both hold two CGFloat. They got the same size and the same alignment, and therefore they can be used interchangeably. So in your case valueWithPoint: fits.
Edit
About the second thing you ask, this should be done with macros:
#if TARGET_OS_IPHONE
value= [NSValue valueWithCGPoint: point];
#else
value= [NSValue valueWithPoint: point];
#endif
Getting the point back:
#if TARGET_OS_IPHONE
point= value.CGPointValue;
#else
point= value.pointValue;
#endif
http://sealiesoftware.com/blog/archive/2010/8/16/TargetConditionalsh.html