If you want such a product, limiting entries to ones no longer than average word length in an actual dictionary would exclude quite a number of actual words, since long actual words are longer than average (that's how averages work). A better approach would be to limit string to something longer than the longest actual word, so that you won't exclude real words. You have to make policy decisions about what the words of English are, for instance is the chemical name of the protein titin a word with a couple hundred thousand letters; do you include pneumonoultramicroscopicsilicovolcanoconiosis which most people don't know, or antidisestablishmentarianism which people mostly know because it's the supposedly longest word of English?
You'd also need to decide what your unit of counting is. The two most obvious possibilities are phonemes, and syllables. It is widely believed (incorrectly, as it happens) that "possible word" is a function of "possible syllable" and "possible number of syllables" (there's more to it than that). So if you determine that the upper limit on syllable count is 15, then all you'd have to do is develop a syllable-generator that gives you all of the syllables of English, so that [pæt] and [præt] are generated, but *[tpæ] and *[rpæt] are not. Armed with all of the possible syllables plus a limit on word length, you have an approximation of all theoretically-possible words of English.
This syllable-generator would be a bit tricky, since you have to make a decision about what syllables are allowed. We know what [hɪl] is a possible syllable in English, since it is an actual syllable found in hill, Hilbert, Hillman and so on. It is not clear on those grounds whether [pæf] is a possible syllable, but we can also rely on native speaker intuitions that even if there aren't any words with that syllable, it's still a theoretically possible syllable – unless your theory of syllables is radically empiricist and if it doesn't exist somewhere in an actual word, it isn't possible. So you would need to devise some psychological test to validate your underlying theory of possible syllables.
Unfortunately, prospects for developing a sharp discriminating function for sorting into possible / impossible are dim. Nonexistent types like *[bma] seem to be generally rejected by all speakers, but there are also syllables like ?[zla] which make most speakers uncomfortable but are not as badd as *[bma]. Onset sequences like [zw] don't exist, except in Zwicky and zwieback, which are not usually household words. The sequence [CLV̆LC] where L=liquid and V̆=single lax vowel happens to be non-existent (i.e. *blort, *grolm, *plælk), and by perseverating on this gap, you can shift people's intuitions to the point that such sequences get judged as "not apparently allowed".
The famous *sCiV̆Ci generalization, that identical consonants separated by a short vowel and preceded by [s] are not possible, is a generalization that isn't limited to the syllable, so just as *[skɪk] is rejected as not a possible word, *[skɪkuwn] is also rejected, and that sequence spans two syllables. A final problem is that while *[fɪ] is not a possible syllable of English, using the usual test (asking speakers "Could there be a word [fɪ]?"), it shows up in a lot of words, like physics. Some people solve this by making the assumption about syllabification, that the word is the combination of the syllable [fɪz] and the syllable [ɪks], but the problem is that people generally do not accept that the second syllable of physics is "icks".
Another approach is to drop the syllable from the computation. Asking people for intuitions about possible phoneme sequences is even more problematic – you're not going to get good answers to questions like "can an English word contain the phoneme sequence [ændə]?".
The underlying issue is that "possible" is not a self-evident fact. "Possible" can only be determined relative to a theoretical model of the thing in question, and there is no clearly-correct theoretical model of "what a word of English is". Even the question of what is "phonotactically possible" is very unclear, and typically people use professionally-privileged introspection to determine this, where judgments are based on on-the-fly mental searches for "similar substrings".
An alternative approach that I would give more serious consideration to is developing probability tables based on actual words, which would tell you what the probability of a given sequence of English phonemes is which, by overlapping the computation, could lead you to conclude that arpantize is a theoretically possible word though not an actual one. If your machine has a relatively short longest sequence for building those tables, for example 6 phonemes, this could be somewhat informative. If you build a probability table based on actual words ranging from 1 to 30 phonemes in length found in some dictionary ranging from 1 to 30 phonemes, all this will tell you is what words are in the dictionary.
[ADDENDUM]
There's a version of the latter approach here for the article and here for the calculator.