DESeq and EdgeR are very similar and both assume that no genes are differentially expressed. DEseq uses a "geometric" normalisation strategy, whereas EdgeR is a weighted mean of log ratios-based method. Both normalise data initially via the calculation of size / normalisation factors.
Limma is different in that it normalises via the very successful (for microarrays) quantile nomalisation, where an attempt is made to match gene count distributions across samples in your dataset. It can somewhat loosely be viewed as scaling each sample's values to be between the min and max values (across all samples). Thus, the final distributions will be similar.
Here is further information (important parts in bold):
DESeq: This normalization method  is included in the DESeq Bioconductor package (version 1.6.0)  and is based on the hypothesis that most genes are not DE. A DESeq scaling factor for a given lane is computed as the median of the ratio, for each gene, of its read count over its geometric mean across all lanes. The underlying idea is that non-DE genes should have similar read counts across samples, leading to a ratio of 1. Assuming most genes are not DE, the median of this ratio for the lane provides an estimate of the correction factor that should be applied to all read counts of this lane to fulfill the hypothesis. By calling the estimateSizeFactors() and sizeFactors() functions in the DESeq Bioconductor package, this factor is computed for each lane, and raw read counts are divided by the factor associated with their sequencing lane.
Trimmed Mean of M-values (TMM): This normalization method  is implemented in the edgeR Bioconductor package (version 2.4.0). It is also based on the hypothesis that most genes are not DE. The TMM factor is computed for each lane, with one lane being considered as a reference sample and the others as test samples. For each test sample, TMM is computed as the weighted mean of log ratios between this test and the reference, after exclusion of the most expressed genes and the genes with the largest log ratios. According to the hypothesis of low DE, this TMM should be close to 1. If it is not, its value provides an estimate of the correction factor that must be applied to the library sizes (and not the raw counts) in order to fulfill the hypothesis. The calcNormFactors() function in the edgeR Bioconductor package provides these scaling factors. To obtain normalized read counts, these normalization factors are re-scaled by the mean of the normalized library sizes. Normalized read counts are obtained by dividing raw read counts by these re-scaled normalization factors.
Quantile (Q): First proposed in the context of microarray data, this normalization method consists in matching distributions of gene counts across lanes [22, 23]. It is implemented in the Bioconductor package limma  by calling the normalizeQuantiles() function.
The simple explanation is that no statistical modeling can fully capture biological phenomena. Statistical methods all rely on assumptions and requirements that are only partially satisfied.
Different methods rely on different assumptions, and in turn, may capture different projections of the reality.
The different results are not mutually exclusive. One of them, neither or all may be true - all at the same time! Which is a bit hard to wrap your head around.
The true problem with all statistics is the "fakeness" and never-ending misrepresentation of the "p-values". P-values are not the accurate quantification of reality.
I think for an experimentalist who wants to understand why use one of these packages over the other, or any at all, most of these explanations are rather vague. They may not have any idea what is meant by "different statistical model."
This is what I would do:
- briefly restate the purpose of the experiment (just to get on the same page)
- briefly review how we test differential abundance
- state why we don't just use standard parametric or nonparametric methods to find significant differential abundance
In general, the main concern in analyzing an experiment is to look for differences between groups. In the case of abundance data (microarray, RNA-Seq, MiSeq, pathway analysis, etc.) we have a list of features (genes, proteins, microbiota, etc.) and a set of samples. These samples have different descriptors or characteristics associated with them such as gender, age, treatment group, treatment time, etc. Once we have our abundances, we want to know how different the abundances are between groups when we look across all samples. This is called "differential abundance," and is typically measured in terms of the "fold change" for each feature, which is the ratio of the mean abundance between groups.
Perhaps the most direct way to determine differential abundance would be to perform an individual linear regression for each feature of the abundance (dependent variable) vs. the values of the descriptor variables across samples. For example,
y_n = b_0 + b1*x1 + b2*x2 + b3*x3
where y_n is the abundance of the nth feature (e.g. gene) and (x1, x2, x3) are variables such as gender, genotype, treatment.
This linear regression gives us a p-value for each regression coefficient (the b's).
Suppose feature y_10 has a significant result for x2, which happens to be gender. Then, we would calculate the fold change FC = mean(Female)/mean(Male), and say that
gender is significantly differentially abundant in feature y_10 with a fold change of FC
note: mean(Female) means "take the mean of the abundances of y_10 for all samples with gender=Female"
The reason we don't use this simplistic approach in most cases is because the distributions of abundances don't meet the requirements of our standard tests (normality, homogeneity of variances, etc.). Therefore, to perform our tests we need to use validated algorithms that generally perform these steps:
- Start with an idea of what kind of distribution our data has (negative binomial, poisson, lognormal, etc.)
- Do specific transformations on the data to make it adequately align to the chosen model
- Perform some sort of regression analysis to obtain significance. This may involve multiple additional steps and statistical techniques.
- Use more advanced theory to estimate the fold changes taking into account all of the previous work.
EdgeR, Limma, and DESeq2 (as well as DESeq) perform these steps with a specific set of assumptions and techniques that are designed to be as optimal as possible for the type of data they are designed for.
It is still up to the user to
- Choose the correct tool
- Use the tool correctly by selecting values for different parameters the model can include
- Properly interpret the results.
The last part is why they pay you lots of money!
I would answer like this to non-bioinformatician or non-statistician.
EdgeR, DESeq2, Limma, and so on are different methods (which use complex statistics) and therefore one would expect when using different methods to get different results. Indeed there is some similarity at general/conceptual level between these methods BUT there are still plenty of differences like for example, methods used for normalizing the data, which affect the results. In general it is unreasonably to expect that two different methods (which used heavily statistics) give the same results. Therefore is normal to have different results from EdgeR, DESeq2, and Limma.