You don't negotiate with Product Owners on time on technical debt vs. time on features. You refactor all the time, while building the features. Product Owners not giving you time aren't the ones at fault for the technical debt, you the coder are, for allowing the code to become a mess over time.
Learn Continuous Integration, Test Driven Development, and how to work in small batches. If you're on a legacy code base, same approach for new code, and additional acceptance tests for old code.
This article is written extremely well, with wonderful context, even utilizing mob programming, describing exactly what you shouldn't do. Don't create a culture that condones bad code. There will always be technical debt, but you should be tackling it all the time, not deferring to some negotiated time period.