Your code that passes null is fine. The problem is that your wrapper code needs to detect null and deal with it. That code is presumably written under the assumption that the third parameter is never null. If you wish to allow null, you must explicitly handle that condition:
static String^ GetValue(String^ section, String^ key, String^ defaultValue)
{
if (defaultValue == nullptr)
// special case handling
....
}