Why not just leave the model as-is, and monkey patch in a new forward method?
def truncated_forward(self, x):
    out = F.relu(self.conv1(x))
    out = F.max_pool2d(out, 2)
    out = F.relu(self.conv2(out))
    out = F.max_pool2d(out, 2)
    out = out.view(out.size(0), -1)
    out = F.relu(self.fc1(out))
    out = F.relu(self.fc2(out))
    return out

model.forward = truncated_forward

I havent tried this, but see no obvious reason why this wouldnt work?