Doing this is pretty straightforward; you'll want to take a look at the documentation for Mathematica's string patterns primarily.
As an example, to use DictionaryLookup with the "ar" and "h" instance you mention, the following are basically equivalent:
matches1 = DictionaryLookup[s__ /; !StringContainsQ[s, "ar"|"h"]];
matches2 = DictionaryLookup[__?(!StringContainsQ[#, "ar"|"h"]&)];
If you have a large list of exclusions that you have loaded from a file, for example, you would want to do something like this:
list = {"h", "ar", "some", "other", "strings" (* ... *)};
matches = DictionaryLookup[s__ /; !StringContainsQ[s, Alternatives @@ list]]];
In this case, the (A @@ B) is syntactic sugar for the Apply[A, B] function and the A|B from the previous examples is just syntactic sugar for the Alternatives function, so Alternatives@@list was equivalent to "h"|"ar"|"some"|"other"|"strings".
To do the sorting, you will probably want to use the SortBy function:
sorted = SortBy[matches, StringLength];