The macro \breaktextat admits two arguments. The first one indicates at which spaces to break, as it may be a single number, or a comma separated list of numbers. The second argument is the text to break. The macro is declared "short" which means that the text to break should not contain empty lines or \par within it.
\documentclass{article}
% we try to make sure we don't overwrite anything
\newcommand*{\breakspacecount}{}
\newcount\breakspacecount
\newcommand*{\breaktextaux}{}
\newcommand*{\breakplace}{}
\newcommand*{\breaknexttoken}{}
\newcommand*{\myendmarker}{}
\def\myendmarker{\myendmarker}
\makeatletter
\newcommand*{\breaktexttest}{%
\ifx\breaknexttoken\myendmarker
\expandafter\@gobble\else
\expandafter\breaktextaux\fi}
% first parameter=comma separated list of break places
% second parameter= the text (no empty line within)
\newcommand*{\breaktextat}[2]{%
\def\breaktextaux ##1 %
{##1\advance\breakspacecount 1
\@for\breakplace:=#1\do{\ifnum\breakspacecount=\breakplace
\\\relax\fi}%
\space
\futurelet\breaknexttoken\breaktexttest}%
\breakspacecount 0
\breaktextaux #2 \myendmarker
}
\makeatother
\begin{document}\thispagestyle{empty}
\breaktextat{3}{this is some raw text with many words in it}
\breaktextat{1,3,5,8,11,14,18,22,26,31,36,41,47,53,59}
{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut
purus elit, vestibulum ut, placerat ac, adipiscing vitae,
felis. Curabitur dictum gravida mauris. Nam arcu libero,
nonummy eget, consectetuer id, vulputate a, magna. Donec
vehicula augue eu neque. Pellentesque habitant morbi tristique
senectus et netus et malesuada fames ac turpis egestas. Mauris
ut leo. Cras viverra metus rhoncus sem. Nulla et lectus
vestibulum urna fringilla ultrices. Phasellus eu tellus sit
amet tortor gravida placerat. Integer sapien est, iaculis in,
pretium quis, viverra ac, nunc. Praesent eget sem vel leo
ultrices bibendum.}
% inserting more than one line:
\breaktextat{3,3,3,3}{this is some raw text with many words in it}
\end{document}

\StrCut, you need at least version 1.7 of xstring. Of course, it can be generalized to several lines but it requires to build a loop. Is it what the OP want? – unbonpetit Mar 06 '13 at 17:36