Welcome to the group :).
Before answering your question, it will be good if I explain why and how "learning rate" is used.
For that sharing an equation below:
Here theta's are weight and alpha is learning rate.
This equation is Gradient Descent equation, used to optimize weights.
Internally, optimizer generally perform similar type of equation for each weight(weights associated with different feature) separately.
Learning rate value describes, how much adjustment should it made in previous weights. Higher the value, faster it converge(but may skip out the best value, thats why optimal value is used).
Now going back to your question: " can't we have different learning
rates (suited to each feature dimension scale) to compensate for not
doing the normalization?"
If I consider mathematically, according to me yes we can use different
learning rate as per the feature values and we surely give a try in
evaluating features weight.
So far I know about Tensorflow and Scikit, both use a single learning rate and its is generic for all features. So if you want to use different learning rate(per feature), either you have to write your own optimizer code or use some other library(not sure which one).
Additional Note may be helpful:
Definitely feature scaling helps in faster convergence in terms of feature weight calculations. But if we dont do feature scaling, in case of some algo's like KNN, K-Means features value may influence the model training as well.