```python
def meter_draws(draws: list, allowance: int) -> dict:
    if not isinstance(allowance, int) or allowance <= 0:
        raise ValueError("Allowance must be a positive integer.")
    
    used = {}
    denied = []
    
    for draw in draws:
        key, units = draw
        
        if not isinstance(key, str) or not key:
            raise ValueError("Key must be a non-empty string.")
        
        if not isinstance(units, int) or units <= 0:
            raise ValueError("Units must be a positive integer.")
        
        if key not in used:
            used[key] = 0
        
        remaining = remaining_for(used, key, allowance)
        
        if units <= remaining:
            used[key] += units
        else:
            denied.append(draw)
    
    return used, denied

def remaining_for(used: dict, key: str, allowance: int) -> int:
    if key not in used:
        return allowance
    return allowance - used[key]
```