Is the difference between two ordinal variables ordinal? Is the difference between two ordinal survey responses still ordinal?
 A: The only mathematical relations that exists between ordinal data is "greater than", "less than", and "equal". Any other mathematical relation, such as addition, subtraction, multiplication, etc., marks the data as being treated as a more complex data type such as interval or ratio data.
I think this quote from Frank Harrell's answer bears addressing:

Take a 4-level pain scale for example (none, mild, moderate, severe). Going from moderate to severe pain may be far worse than going from mild to moderate pain. Yet they both have a difference of 1 if pain were coded 0,1,2,3.

In ordinal data, the "separation" between different values isn't merely "not necessarily constant", it's not defined. The levels are being treated as having no defined metric. The numbers are merely labels that have a particular order. You could just as easily call the pain levels "banana, orange, apple, pear", as long as it's understood that the labels have that order. Saying "pear minus apple might be larger than apple minus orange" is meaningless. From a CS perspective, the pain level are objects with the methods .lt(), .gt(), and .eq(), .repr()and nothing else. There is no .minus() or .plus() method. Pain level "0" is just an object whose .repr() value is "0". It has no other relation to 0. Is it not the int 0, and you can't apply int operations to it.
A: Clearly not, in general.  Take a 4-level pain scale for example (none, mild, moderate, severe).  Going from moderate to severe pain may be far worse than going from mild to moderate pain.  Yet they both have a difference of 1 if pain were coded 0,1,2,3.
Ordinal scale data need to be analyzed in a way that subtraction is not used.  This is discussed further here.
A: 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

A: Ordinal variables are often not even numeric - the difference between ordinal variables isn't even a defined operation, much less an ordinal variable itself.
Consider three hot sauces, mild, spicy, and extra hot. How do you define (spicy - mild) or (extra hot - spicy)? There is no rationale in mapping these ordinal values to numbers and treating them as numeric variables.
If you had a rationale for claiming that the difference between mild and spicy is smaller than the difference between spicy and extra hot, you are now quantifying the differences between levels in a way that defies the definition of an ordinal variable, which indicates that you can only rank the levels but not comment on the "distance" between them. If you can quantify the size of the difference between levels, it's not an ordinal variable in the first place.
