Ну, где-то ты напортачил.
Вообще, когда я последний раз делал такую штуку я делал ее через форму и вызов CreateParented.
Код:
// Код DLL
// Нужна для корректного удаления формы
procedure FreeForm(var Frm : TForm); stdcall;
begin
FreeAndNil(Frm);
end;
function MakeForm(AParent : THandle) : TForm; stdcall;
begin
Result := TForm1.CreateParented(AParent);
Result.Visible := True;
end;
exports
FreeForm,
MakeForm;
// Код основной программы
// Создаем форму на панельке.
var
PluginForm : TForm;
begin
PluginForm := MakeForm(Panel1.Handle);
...
// Поработали с формой, теперь ее убиваем
FreeForm(PluginForm);
end;
Надеюсь, что причины использования FreeForm объяснять не надо?