Bueno parece que el problema estaba en que tenia que usar "Abort" en vez de "Facturas_cab.Cancel", cambiado eso, anda perfecto...
Código:
procedure TdmPackingList.TFacturas_cabBeforePost(DataSet: TDataSet);
var
query: String;
begin
if TFacturas_cab.State in [dsInsert] then
begin
query:='SELECT COUNT(nro_factura_cab) FROM facturas_cab WHERE nro_factura_cab='+QuotedStr(TFacturas_cabnro_factura_cab.Value);
if not (TFacturas_cab.QuickQuery(query)='0') then
begin
MessageDlg('Esta factura ya existe!', mtError,[mbOk],0);
Abort;
end;
end;
end;