Regarding your 1st question, you can do this in a single nn.Module class.
class SecondNet(nn.Module):
    def __init__(self):
        super(SecondNet, self).__init__()
        vgg16 = models.vgg16(pretrained=True)
        child = vgg16.children()
        New_VGG_Without_Classifier = nn.Sequential(*list(child)) # you can control the children layers by slicing
        self.conv1 = nn.Conv2d(512, 100, 3)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(100, 16, 3)
        self.fc1 = nn.Linear(16 * 3 * 3, 12)
        self.fc2 = nn.Linear(12, 8)
        self.fc3 = nn.Linear(8, 15)

    def forward(self,x):
        x = self.New_VGG_Without_Classifier(x)
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 3 * 3)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x