```ts
export function dealPacket(items: string[], seats: number[], order: string): Record<string, unknown> {
  if (!Array.isArray(items) || items.some(item => typeof item !== 'string' || item.length === 0)) {
    throw new Error('Invalid packet');
  }
  if (new Set(items).size !== items.length) {
    throw new Error('Duplicate values in the packet');
  }
  if (!Array.isArray(seats) || seats.some(limit => !Number.isInteger(limit) || limit <= 0)) {
    throw new Error('Invalid limits');
  }
  if (!['round', 'reverse', 'snake'].includes(order)) {
    throw new Error('Invalid turn sequence');
  }

  const hands: string[][] = Array.from({ length: seats.length }, () => []);
  let handIndex = 0;
  let direction = 1;

  for (const item of items) {
    while (seats[handIndex] <= 0) {
      handIndex = (handIndex + direction + seats.length) % seats.length;
    }
    hands[handIndex].push(item);
    seats[handIndex]--;
    if (order === 'snake') {
      direction *= -1;
    } else if (order === 'reverse' && handIndex === 0) {
      direction = 1;
    }
    handIndex = (handIndex + direction + seats.length) % seats.length;
  }

  return { hands, left: items.filter(item => !hands.some(hand => hand.includes(item))) };
}
```