Correct, but technically you can destroy it (see FSubsystemCollectionBase::Deinitialize for reference). A neat approach was posted by siliex#1214 in Slackers:
bool UMyServerWorldSubsystem::ShouldCreateSubsystem(UObject* Outer) const
{
if (!Super::ShouldCreateSubsystem(Outer))
{
return false;
}
UWorld* World = Cast<UWorld>(Outer);
return World->GetNetMode() < NM_Client; // will be created in standalone, dedicated servers, and listen servers
}
So he doesn’t destroy anything, but simply create wherever needed. This 100% works great for a WorldSubsystem, though as stated in the link I sent before, this could be a problem for other types of subsystems.