Instead of using limited FireUser1-FireUser4, store outputs in the we get from KeyValue() method in user data (maybe a separate StringMap for quick access), hook AcceptInput() on entity, search stored outputs, fire CEventQueue::AddEvent() (version with targetname) to add custom input/output chain the queue, the rest is done automatically by the game.
Instead of using limited FireUser1-FireUser4, store outputs in the we get from KeyValue() method in user data (maybe a separate StringMap for quick access), hook AcceptInput() on entity, search stored outputs, fire CEventQueue::AddEvent() (version with targetname) to add custom input/output chain the queue, the rest is done automatically by the game.