Why are my Decision Tree Leafs not pure?
With default settings the DecisionTreeClassifier does not have any restrictions in terms of complexity as described in the Scikit Documentation. 

Therefore, it will stop further branching the tree if either a given node is pure (all examples have the same classification) or there are no further attributes to branch on. 

So if your final tree contains leaves which are not pure (for the data set it has been trained on) the algorithm did not have any attributes to further split on. 

In case you applied any kind of randomization on your data like a random split of training and test data this might turn out differently when splitting again and getting a different training set.