I like the `Storage` name! But to be consistent with what we have elsewhere in the framework, I'd create a singleton object and put `Storage` there:

    object Handle {
      class Storage extends Handle {
        def acquire() { ... }
        def release() { ... }
      }
    }

Also, I'd argue for making `Storage` extend `Handle` - this would allow hierarchical modeling.
You could have a `ResourceManager` class that is composed of a `MeshPalette` and a `TextureAtlas` which are in turn composed out of basic MacroGL primitives like `Texture`s and `AttributeBuffer`s.

    class ResourceManager extends Handle.Storage {
      val shader = manage(new Program(...)(...))
      val atlas = manage(new TextureAtlas(...))
      val atlas = manage(new MeshPalette(...))
    }