I'm not sure it's good practice to make instance from library handle. It can be invalid handle accidentally passed by user or handle obtained from dlopen or LoadLibrary that is wrong for libraries with D runtime because they should be loaded with rt_loadLibrary as I understand. I think Library should be self-sustained type like File from std.stdio and provide load/unload as member functions. this(handle) should be private or be replaced with unsafe wrapHandle static function (just like wrapFile). 

Another thing I want to mention is loading mode. dlopen on Linux and LibraryLoadEx on Windows provide some specific flags that can be used here too. It also useful to add D-specific flags like NotLoadClassInfos to reject automatic ClassInfo loading for all classes in shared library if it's not needed (I'm sure it's some expensive operation).