Stored Procedures execution permissions
Permissions are enough to handle this requirement: just GRANT permissions on the wrapper stored procedure and you should be fine. Don't GRANT permissions on the Internal_* stored procedures and users won't be able to execute them.

Example:

USE tempdb;
GO

CREATE USER ZeroCool WITHOUT LOGIN;
GO

CREATE PROC Select1
AS
SELECT 1
GO

CREATE PROC Select2
AS 
SELECT 2
GO

CREATE PROC SelectAll
AS
EXEC Select1
EXEC Select2
GO

GRANT EXECUTE ON object::SelectAll TO ZeroCool
GO

EXECUTE AS USER = 'ZeroCool'

-- Works
EXEC SelectAll
-- Fails
EXEC Select1

REVERT
GO