I fear that your dictionary must be more extensive than mine!
However, here are some answers that seem to work:
1. stop (+deter = protested, + mien = nepotism)
2. nee (+stop = poteens, + gild = deleing (not words I would have found!))
3. dew (+nee = weened, + naps = spawned) 4. ???
... 8. stir (+forte = retrofits, + said = diarists) 13. ear (or ears).
I'm struggling to find words that find with "slam" and "seen" or with "tale" and "evince".
Methods: I have a short python program.
The first part does a subtraction of a small word from a big word. It works recursively to produce a list of possible results. e.g. "lelabc" minus "lab" = ["elc","lec"]. "lelabc" minus "lba" = [].
Subtract("lelabc","lab")
Out: ['elc', 'lec']
Then the second part takes an input of a small word. It finds all longer words in my dictionary and does a reverse subtraction. It checks whether those reverse subtractions (if any) are in my dictionary. If they are, add them to a set. Return the set. E.g.:
findAll("lane")
lane iv veinal
lane id denial
lane it entail
lane iv venial
lane reg general
lane sit entails
lane rte eternal
lane ret eternal
lane deb enabled
lane reb enabler
lane trap parental
lane deem enameled
lane muon noumenal
lane tarp prenatal
lane tiro oriental
Out: 'deb','deem','id','it','iv','muon','reb','reg','ret','rte','sit','tarp','tiro','trap'}
findAll("evince")
Out: set()
Finally, I take two small words and take the intersection of the small words in the set. I don't know if this is cheating, but the computer is definitely better at finding intersections of two sets than I am.