It can’t be done in an elegant manner. I would advise you to break self.features in two sequential modules like this:
self.features1 = nn.Sequential(
            nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=0),
            nn.BatchNorm2d(96, eps=1e-4, momentum=0.1, affine=True),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
self.features2 = nn.Sequential(
            BinConv2d(96, 256, kernel_size=5, stride=1, padding=2, groups=1),
            nn.MaxPool2d(kernel_size=3, stride=2),
            BinConv2d(256, 384, kernel_size=3, stride=1, padding=1),
            BinConv2d(384, 384, kernel_size=3, stride=1, padding=1, groups=1),
            BinConv2d(384, 256, kernel_size=3, stride=1, padding=1, groups=1),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )

The other (uglier) option is to index nn.Sequential (this part is not documented in the docs):
def _feed_layer(self, layer_idx, input):
    for i in range(layer_idx, len(self.features)):
        input = self.features[i](input)
    return input

and then in forward:
output = self._feed_layer(4, input) # feeds the 4th layer in self.features (BinConv2d)