Interesting post. I don't have too much of a direct response, but I have several related ideas. Sorry this might drag the discussion to a tangent...
1. Computational complexity
This is a huge issue in engineering (speech recognition, machine translation, etc.). But it apparently isn't much of an issue in cognition-- we do this quite easily. It's hard to know exactly what the complexity of the brain is compared to a computer, but whatever the correct algorithm is, we should be able to implement it in linear time for example.
If the best algorithm found is one that is computationally impractical, it is probably the wrong algorithm. That's an odd puzzle because the problem does really seem to be very complicated.
2. What is the object of study?
On the other hand, maybe it just isn't possible to partial out specifically linguistic influences (subject-verb agreement) from general knowledge (movie-popcorn agreement) in string probabilities.
This is where my current thoughts are about syntax, but beyond that point. You also said this:
there is an inventory of re-usable substructures or pieces (like context free grammar rules, which are really just local subtrees), and structures and word strings are produced by selecting pieces from your inventory.
That's a standard position, and one that I question, actually.
Language has hierarchical structure (as much as it bothers me to admit that-- I've been trying to find some alternative for years and have finally accepted that it must be correct). But WHERE is that structure? I think this can lead us to be a better answer.
I'll copy two paragraphs from a short proposal I wrote for my dissertation project:
It is widely accepted in the field of Theoretical Linguistics that a major research goal is determining the relationship between form and meaning in natural languages. Since Chomsky’s early work (1956, 1957, 1959), the formal study of Syntax has assumed a model of individual nodes arranged in a hierarchical structure. Essentially each word is given a position within a hierarchy such that structural relationships can be determined between the nodes in a sentence. This approach has been extremely popular and productive for the field. It is the purpose of this dissertation to take another look at these basic assumptions in order to introduce a more accurate method for understanding the relationship between linguistic form (“Syntax”) and underlying meaning (“Semantics”). In short, the exact form of a linguistic utterance will be seen as the result of linearization and widely variable language-specific rules, while the underlying semantic structure will resemble what is assumed in the standard hierarchical models but without many of the complications introduced by trying to account for peculiarities of form.
While the standard theory often appears successful and leads to insightful results, I argue that this is an illusion: most of the time, linguistic form is isomorphic to semantic structure, but exceptions reveal that the situation is more complex. It is not unexpected that, ceteris paribus, linguistic form would reflect semantics, but this is not a strict rule in human language.
To name some specific examples:
1. Coordination
I'm now convinced that "and" is not actually a node in the tree, but rather the linear representation of a coordinated structure (whatever that actually is is irrelevant).
2. Control verbs as in "John tries [John] to swim."
There has been a huge amount of debate about how that extra "[John]" gets interpreted semantically. Maybe it's movement. Maybe there's some invisible pronoun. Etc. My answer is fairly simple: a preliminary linear parse adds "John" back in to the structure so that it is available for semantics.
3. Periphrasis:
Some language have multiple realizations for a single meaning. In a single paradigm, something that might be realized as an affix in one case might be realized as a separate word in another. There are some very convincing examples of this, but I can't list them off the top of my head. To take a familiar (and probably slightly less convincing example), consider English tense:
Present: sometimes -s
Past: -ed
Future: will
The future is oddly a separate word with very different syntax compared to the others.
My suggestion: this is just a surface-level issue, not relevant to the real hierarchical structure.
So what's left at the actual hierarchical structure?
Core relationships like modification and argument-selection. Maybe almost nothing else.
(There is a complication here in that obviously we need some kind of hierarchical structure to begin interpreting in the first place such as recognizing "try to" as a control structure rather than some other linear string. But I'll set that aside for now. It's probably some kind of boostrapping.)
In short: I think syntacticians are looking at the wrong thing.
So for your question, this suggests that building up a bunch of subtrees from surface form is the wrong approach and hence why it is computationally difficult and not especially reliable.