I'm not sure I understand your question.
My take on lifetimes is:
If you have them wrong, your program will not compile. As such it's impossible to have sloppy lifetimes.
Lifetimes are not just those tick marks you put in your code. The actual lifetime of objects in your program is determined by where your data is created, how it is passed around and so on. The structure of your code defines the lifetimes of objects.
I consider myself to be new to Rust, having only started out a year ago. There are many areas of Rust I have not even looked at yet much. But I don't think I have ever written a lifetime annotation into my code. Despite that I have code that has been running in production for much of this last year.
In fact I would go as far as to say that for a lot of application level code if one starts to feel the need for lifetime annotations it's time to step back and think about your program structure and how it can be rearranged to avoid that.
I guess the view I express there likely does not apply if you are creating lower level libraries.
By the way, I'm not sure I would agree that Java is a higher level language. Given the things that one cannot do in Java that seems unlikely.