Removing stopwords - simple functional words like "the" and "is" - from texts is a cleaning technique useful for some kinds of text analysis; if you're looking at frequency of words, for example, then getting rid of boring-but-common words is a good idea.
However, it's not appropriate for all (or even most) types of NLP; it's not helpful in translation, for example, and lots of models are capable of dealing with grammatical noise words on their own.
Even when you are doing a task which requires removing stopwords, you can always tailor your stopwords to the task at hand.
If you're filtering out stopwords using NLTK's stopwords lists, for example, deciding to keep the word "not" is just a question of removing it from the stopwords list before filtering:
from nltk.corpus import stopwords
stops = stopwords.words("english")
stops.remove("not")