But I'm worried this is bad practice, since it seems to me that the whole concept of an associative array is that the order of the keys never matters,
Nonsense. This is not a "whole concept of an associative array." It's just that order rarely matters, and so, by default, we refuse an order to get a conceptually simpler (and more efficient) data structure.
and that any operations that depend on ordering should just use lists, because therefore lists exist
Stop it right now! Think a second. How would you use lists? How to list pairs (key, value), with unique keys, right? Well congratulations, my friend, you just came up with OrderedDict, just with a terrible API and really slow. Any conceptual objection to an ordered display will apply to this special data structure. Fortunately, these objections are pointless. Ordered mappings are great, they just differ from unordered mappings. Providing them with a targeted implementation with a good API, and good performance improves people's code.
In addition: Lists are just one kind of ordered data structure. And although they are somewhat universal in that you can practically all data structures from some combination of lists (if you lean back), this does not mean that you should always use lists.
I have no data on this, but I bet that performance for lists is universally better than OrderedDict.
Data (structures) do not have performance (do not). Operations on data (structures). And therefore, it depends on what operations you are interested in. If you just need a list of pairs, the list is obviously correct, and repeating it or indexing it is pretty effective. However, if you want an orderly matching, or even a tiny subset of matching functions (for example, processing duplicate keys), then the list one is pretty terrible, as I explained above.