It is possible to override a TJS2 class with the same name, but you must follow the following rules:
1. Use a unique identifier when declaring a class
Example of this wrong usage:
Code:
global.ClassToOverride_original = global.ClassToOverride;
class ClassToOverride extends global.ClassToOverride_original
{
}

When instantiating the class, this will cause a segmentation fault.
2. Do not use an identifier that has been deleted
Example of this wrong usage:
Code:
global.ClassToOverride_original = global.ClassToOverride;
delete global.ClassToOverride;
class ClassToOverride extends global.ClassToOverride_original
{
}

This will cause Member does not exist exception.
3. Place the original class name as the constructor
With these three rules, we can override a TJS2 class while keeping the same name.
Code:
global.ClassToOverride_uniqueidentifier_original = ClassToOverride;
class ClassToOverride_uniqueidentifier_override extends ClassToOverride_uniqueidentifier_original
{
    function ClassToOverride_uniqueidentifier_override()
    {
        super.ClassToOverride(...);
    }
     function ClassToOverride()
    {
        ClassToOverride_uniqueidentifier_override(...);
    }
}
global.ClassToOverride = ClassToOverride_uniqueidentifier_override;

This is a cleaner way of adding features like word wrapping or line breaking to KAG, compared to some code I've seen.