Read the real feature state
**DisabledWithPayloadRemoved** is the important state: the feature exists but the files are gone, which is why every online attempt fails on a machine without Windows Update access.
Get-WindowsOptionalFeature -Online -FeatureName NetFx3 | Select-Object FeatureName,State
DISM /Online /Get-FeatureInfo /FeatureName:NetFx3 | Select-String -Pattern 'State'