I don’t want to derail where Mike was going, so won’t cover everything, but some info/features which might be helpful in looking at this:
Engaged time is calculated in the dbt web model the same way as other models. They’re all open source so you can look at the source code to discover how it’s done.
The models will aggregate to a page view level. If you have a UUID per component, one option is to track it as a global context, and run a similar logic to what I linked above, but grouped by your UUID rather than page view ID. You would have to do this separately as your own custom modeling logic which joins into the standard models.
Alternatively, if you like you can somewhat simplify the problem by manually tracking page views for each component and treating them as separate pages. This may or may not make sense.
Another approach would be to leverage edge analytics to achieve what you want using some clever javascript.