Is the difference between two ordinal variables ordinal? Is the difference between two ordinal survey responses still ordinal?

If you are taking the difference of two ordinal responses, you are not treating the responses as ordinal, but instead treating them as if they were interval.
This isn't always appreciated.
One example is with the Wilcoxon signed rank test. the procedure begins by subtracting the paired response values, so isn't applicable for strictly ordinal data.
My understanding is that aligned ranks transformation anova procedure also begins by subtracting values.
I have seen people argue that data from scales created by summing several Likert-type items should be treated as ordinal.  But I would argue that once you are summing values, you are already treating the responses from the Likert-type items as interval.
EDIT: Based on some discussion in the comments, here is an example of using ordinal regression with unstructured thresholds for cut points, with a repeated measures design.  In R. (Can also be run at rdrr.io/snippets/.)
if(!require(ordinal)){install.packages("ordinal")}
if(!require(emmeans)){install.packages("emmeans")}

Respondent = factor(c(letters[1:12], letters[1:12]))
Time       = factor(rep(c("Before", "After"), each=12), 
    levels=c("Before", "After"))
Score      = as.factor(c(1,2,3,1,2,3,1,2,3,4,4,4,
                         2,2,2,3,3,3,2,3,4,4,5,5))
xtabs(~ Time + Score)

   ###         Score
   ### Time     1 2 3 4 5
   ###   Before 3 3 3 3 0
   ###   After  0 4 4 2 2

library(ordinal)
model = clmm(Score ~ Time + (1|Respondent))
summary(model)

   ###           Estimate Std. Error z value Pr(>|z|)   
   ### TimeAfter   2.7262     0.9758   2.794  0.00521 **

library(emmeans)
joint_tests(model)

   ### model term df1 df2 F.ratio p.value
   ### Time         1 Inf   7.805  0.0052

wilcox.test(as.numeric(Score) ~ Time, paired=TRUE)

   ### Wilcoxon signed rank test with continuity correction
   ### V = 4.5, p-value = 0.02475

