<p>I've been thinking of ways of providing syntactic sugar for a framework I have been working on. I want to deal with Immitable objects exclusively.</p>
<h3>Say I have an immutable object and wish to create a modified version of it. Would, in your view, a non-instantiable class with a single static factory method break OO principles ?</h3>
<br>
<blockquote>
<p>As an example using a String:</p>
<pre><code>public final class LOWERCASE {
  
    private LOWERCASE() {}
  
    public static String string( final String STRING ) {
   
      return STRING.toLowerCase();
    }
}
</code></pre>
<p>Therefore from this example I could write:</p>
<pre><code>String lowercaseString = LOWERCASE.string( targetString );
</code></pre>
<p>Which I find very readable.</p>
</blockquote>
<br>
<h3>Any provisos against such an approach?</h3>

Usually on immutable objects, I would have a method returning a modified version of the object. So if you have some immutable collection, it can have a sort() method, that returns a new collection that is sorted. However, in your String example this is not possible, since you cannot touch the String class.
Your approach is quite readable, and I think for edge cases like this, is perfectly fine. For immutable objects you write yourself, I'd have the method on the object itself.
Eric Lippert's series on immutable objects in C#
is quite good, by the way.