how long should an sql-server transaction run at most
While Dan is correct, the way your question is worded leads it to be potentially answered a little subjectively (which unfortunately makes it not very fitting for this site), I think the following is objective enough of an answer:
It's generally best practice to hold transactions open for the least amount of time possible that is necessary to complete the workflow of a task. The shorter (and obviously less frequent) occurrences of transactions will typically lead to a better performing system overall, when concurrency is involved.
A system with concurrency (e.g. multiple users) where transactions are held open for long periods of time, runs the risk of increased blocking on the objects that are being transacted on, since the transaction will lock access to that object.
Even worse with long running transactions, is if they are rolled back either due to an error or when their process is killed (like you mentioned you are already doing). The rollback always is (mostly) single-threaded, which can lead to the rollback taking significantly longer to occur than the transaction process has taken so far (still keeping the objects within the transaction locked throughout the entire rollback).
A transaction taking an hour to run is not something I would be a fan of personally (but not unheard of). I try to keep my own transactions as quick as possible (few seconds at most). A transaction being held open for days is definitely not normal / commonplace. But if the system you're using doesn't support concurrency and only permits one user at a time, then at least it only affects you (the current user) who is waiting on such slow processes to finish anyway.
In my opinion, it sounds like your Teamcenter software is inefficiently written.