I'm far from being a macro champion but I believe that would be feasible:
Can I attach some macro logic to an extern method definition so that every time it's used, it that would add an intermediate call to perform the conversion from A to B and from B to C ?
Something like:
extern class ExTest {
@:build(myMacro.convert)
static function test2(v : haxe.extern.EitherType<MyAbstractInt,SomethingElse>) : Void;
}
and MyMacro.convert would actually just wrap with, or add inline the conversion:
var arg : MyAbstractInt = T2;
ExTest.test2(arg);