I noticed that both edgeR and limma have function to perform differential splicing analysis based on exon level counts. I am wondering why exon level counts are used instead of splice junction counts (i.e. STAR SJ output). Would it be ok to perform an edgeR or limma analysis using splice junction counts?
Yes, limma and edgeR work fine with junction counts, for example in limma::diffSplice and edgeR::diffSpliceDGE. You can use exon counts or junction counts or any combination of the two.
We like to use Rsubread::featureCounts with nonSplitOnly=TRUE and juncCounts=TRUE to get junction reads and exon reads with each read counted once only. You can then use featureCounts2DGEList(fc) to convert the featureCounts object to an edgeR DGEList including both exon and junction counts.