Множественное наследование всегда можно сделать вручную (как в C 
Object.QueryInterface() - и вперед.
Приведи на Обероне реализацию, плиз. Object.QueryInterface это ж вроде как ни разу не Си, это С++.
Все наследуется от базового Object, у которого есть перегружаемый QueryInterface. Допустим у наc есть объект Object -> Drawable и его надо положить в контейнер, который хочет Object -> Hashable:
1. Реализуем свой Object -> Hashable -> MyHashable, в котом есть ссылка на оригинальный Object -> Drawable
2. У MyHashable реализуем QueryInterface, который умеет возвращать оригинальный Object -> Drawable.
3. Кладем в контейнер.
4. Когда надо вытащить из контейнера и получить оригинальный Object -> Drawable: вытаскиваем Hashable, вызываем у него QueryInterface, кастим результат к Drawable.
Все просто

Только закат солнца вручную

P.S. В С++ оно не надо - там есть dynamic_cast, который замечательно работает с множественным наследованием.