I was able running "a version" of Observation on old OS (in a very quick and dirty manner, adding Observation sources directly to my app along with cutting a few bottom types that related to thread storage IIRC, as I did this test in a single threaded app). I wasn't able making SwiftUI on old OS to use the new Observation though.
IRT SwiftUI usage of new Observation on new OS and old ObservableObject on old OS - I didn't try this hybrid approach myself but it might work.