I would think it is "expected behaviour" - the interface (whether it is the user-interface or XOG) is preventing you from creating an invalid value in the application.
I missed the point you made about it being a dynamic lookup, my example was with a fixed list of values and I always knew the values that would be inactive so I could (relatively easily) construct the XOG to re-activate and then de-activate the lookup values. For you case with a dynamic lookup you are probably not going to be able to do this, so I would argue that the application is doing the right thing in uploading the data and just ignoring that value - perhaps if it was very important to you to retain that de-activated value then you should just de-activate the data rather than remove it (I mean in the underlying source of your dynamic lookup**) or maybe load the value into a field with no validation. No simple answer though I think.
( ** so yes if you could rewrite your dynamic lookup so it still presented the deactivated data in the lookup then the XOG would work - you might be able to use the "BROWSE ONLY" NSQL construct to help you there but I have a feeling that that is only useful in the way that UI works rather than with creating data via XOG)